2012年11月22日 星期四

NSError用法

之前我經常都會寫成這樣

 

NSError *fileError = nil;
....
if(fileError != nil)
....

 

後來才發現這樣是錯的!!

 

下面是從apple文件擷取出來的片段

Important: Success or failure is indicated by the return value of the method. Although Cocoa methods that indirectly return error objects in the Cocoa error domain are guaranteed to return such objects if the method indicates failure by directly returning nil or NO, you should always check that the return value is nil or NO before attempting to do anything with the NSError object.

 

大意是說,應該先檢查回傳的結果是否正確,再去用NSError。

所以應該寫成

 

NSString *fileContents;    
NSError *fileError;

fileContents = [NSString stringWithContentsOfFile:fileOnDisk
encoding:NSMacOSRomanStringEncoding
error:&fileError];

if(fileContents == nil) {
NSLog(@"Error : %@", [fileError localizedDescription]);
// ... i.e. handle the error here more
return ...; // often returning after handling the errors, sometimes you might continue
}

但是為什麼要先檢查結果呢?

看了這篇http://stackoverflow.com/questions/2069039/error-handling-with-nsurlconnection-sendsynchronousrequest之後

他舉例下載檔案有時候會在下載途中遭遇錯誤,並且被framework解決掉。雖然結果有正確回傳回來,但是NSError物件還是被設定了。

 

參考連結:http://stackoverflow.com/questions/1808929/handling-nserror-when-reading-from-file/1810301#1810301

2012年11月18日 星期日

Mango, House

最近突然愛上聽電子音樂,找了幾首Tiesto跟Armin Van Burren的歌來聽。

這兩位是屬於Trance風格的舞曲,聽起來的感覺是旋律性比較強,有的會有女性人聲搭配。

 

後來在Youtube上的推薦名單上亂點,無意間聽到了一個俄羅斯的DJ-Mango的作品

youtube播放清單

在假日慵懶的下午來杯咖啡,聽聽這多麼令人舒服的混音作品。

人生,活在當下。

2012年5月13日 星期日

xcode游標移到文字最前面

在使用xcode開發時有一點很不爽的就是按⌘+會跳到整行的最前面(通常是空白),還要另外按鍵跳到真正的文字開頭實在有夠麻煩!

還好有好心阿多仔幫我們寫xcode plugin解決這惱人小問題,參考
https://github.com/insanehunter/XCode4_beginning_of_line

把project clone下來然後用xcode開啟->編譯,就ok了。

現在再按一次⌘+試試看吧。

2012年2月16日 星期四

手搖飲料店生意觀察

今天中午吃飽飯後突然覺得應該出去走走,不然肚子可能會越來越大。

走著走著來到了公司附近的大街上,我一時興起決定觀察幾家飲料店的生意狀況。

 

老K紅茶:清一色是稍微會打扮的女生,攤子前排了約7、8人左右。

水巷茶弄:一般女生,我還聽到有人說這裡沒椰果她不買,排約5人

清心:我經過時幾乎沒人,上班族都不喝清心嗎?

50嵐:人最多,大概有10幾人在排隊,男女都有。

橘子工坊:排的人跟水巷茶弄差不多。

 

結論:

  1. 品牌威力驚人,但是特色也很重要。
  2. 要能賣客群想要的產品。
  3. 消費者口味越來越重,喜歡加一些有的沒的配料。

2012年2月8日 星期三

近日新學到的觀念:判斷delegate是否respondsToSelector

在實作delagate的時候為了判斷delagate是否實作該method需用respondsToSelector去偵測。
if (self.delegate && [self.delegate respondsToSelector:@selector(refreshState)]) {
    [self.delegate refreshState];
}
但總是出現warning: method '-respondsToSelector:' not found (return type defaults to 'id')
後來看了這篇找到解法。
原來在protocol裡面要conform NSObject!
如果自己在delegate實作裡去用[self respondsToSelector:sel]會錯XD


2012年1月19日 星期四

在finder直接開啟該路徑的console畫面

話說前幾天為了測試載下來的檔案到底有沒有完整,得進模擬器裡各個app的資料夾。

但是通常這些資料夾名稱都是又臭又長,有時候如果不小心把console關掉,就要再

到程式裡印出路徑再複製貼上。我的解決辦法是:把iphone simullator那個資料夾

加進最愛,然後用Go2Shell,就ok啦。

順便記錄一下如何在console下用軟體去開檔案

open -a ""application name" file

example: open -a skim test.pdf

2012年1月17日 星期二

一些關於GCD(Grand Central Dispatch)用法的鏈結蒐集

首先我必須說,stackoveflow真的是屬於programmer的線上遊戲,越玩會越起勁!

在問的時候會有高手給你更新更紮實的觀念,在答的時候會需要找更多資料增強自己的答案完整度。

所以無論是問或是答都可以從中學習到更多東西,這就是所謂的教學相長啊。

趁著這次研究GCD相關的問題,蒐集一些自己覺得有趣的討論串。

 

下面這篇是討論在讀取大型圖檔時,如何設計讓使用者可以隨時取消背景的下載動作。

http://stackoverflow.com/questions/7605017/interrupt-queue-or-file-write-operation-in-ios

 

用兩個queue分別做DSA跟寫入檔案。

http://stackoverflow.com/questions/4532509/grand-central-strategy-for-opening-multiple-files

 

離開view之後,讓queue停止做事。

http://stackoverflow.com/questions/6525666/prevent-multiple-dispatch-queue-create-from-being-created-in-viewdidload

 

不錯的GCD tutorial一則。

http://www.fieryrobot.com/blog/2010/06/27/a-simple-job-queue-with-grand-central-dispatch/

2012年1月15日 星期日

用長按手勢標記地點 Long press to drop pin

最近想做一個LBS App,今天花了四、五個小時結果只做了兩個功能XD
一個是Google static maps沒啥好說的,用asihttp跟imageview兜一兜很快就出來了
第二個就是做出讓使用者可以在地圖上選擇自己要加入的地點座標
我大概參考了兩個app,一個是國內的,另一個是國外的

這是國內的
國內的加入地點功能頁面

第二個是國外的
國外的加入地點功能頁面

差別在哪呢?一個要用拖移的,一個直接點地圖上的點就可以標記你要的地點。
我個人是比較喜歡第二種方式啦,所以大概找了一下子怎麼做出這效果,看下面這連結吧。
http://freshmob.com.au/mapkit/mapkit-tap-and-hold-to-drop-a-pin-on-the-map/
做出來之後,我個人是覺得不用點選就出現callout好像使用者經驗會好一點。

        for (Annotation *annotation in mapView.annotations) {
            if(nil != annotation)
            {
                [mapView selectAnnotation:annotation animated:YES];
                break;
            }
        }

反正這個map只會有一個點,所以我就偷懶用fast enumeration加if了。 目前做出來是像這樣
本人英文荒廢已久,有拼錯還請見諒XD
下次學第二個把字移到上面的小UIView好了,看起來有質感一點:D

2012年1月13日 星期五

寫(!ivar)好還是(nil != ivar)好?

偶然在stackoverflow看到有人問這個問題,覺得還滿有趣的,分享一下
http://stackoverflow.com/questions/6782190/vs-nil-in-objective-c
if(!ivar)
{
  //do something
}
or
if(nil != ivar)
{
  //do something
}
簡單重點:
(!ivar)是利用原始C沒有確切的boolean值這個特性,若0則判斷為假,非0則判斷為true。
在Obj-C里,若欲判斷標的為指標的話,因為nil「通常」會是0x000000,所以如果不是0x000000,則為true。
但是,nil有可能不是0x000000,所以理論上,寫(nil != ivar)是比較安全的。

Mac可用台銀送的EZ100PU讀卡機,但是...

自從轉換到Mac之後就一直在煩惱網路轉帳的事情,我自己用的網路銀行限制一定要用晶片讀卡機,我也不知道Mac是否有支援的晶片讀卡機。

今天要繳房租時,突然想到之前去台銀辦網路銀行有送一台晶片讀卡機,趕緊把它拿出來好好端詳一番。

機種:EZ 100 PU

馬上來查查看...有了有了看這篇 http://taipeimac.ning.com/profiles/blogs/jing-pian-du-ka-ji-for

附上 星堡EZ 100 PU Mac驅動下載位址

灌完之後reboot,我的網路銀行還是沒法用,真是令人失望,難道真得去辦玉山?