2010年10月1日 星期五

[iPhone][crash] 重複 release 及 allocate 單一 View 時造成的問題

要先呼叫 removeFromSuperview, 之後再呼叫 release 及設成 nil, 不然就會造成 crash, 找這 bug 找了好一陣子...

以後寫的時候一定要特別注意...

2010年9月27日 星期一

[iPhone] Logging 利用 NSLog 加上 __FILE__ __FUNCTION__ __LINE__

為了Debug並且在Release的時候不會把Log顯示給用戶看到, 建議加一個 #ifdef, 並且可以利用 __FILE__, __FUNCTION__, __LINE__, 加速Debug的進度.

#ifdef _DEBUG_
NSLog(@"%s %s %d", __FILE__, __FUNCTION__, __LINE__);
#endif

如果要再寫的更漂亮, 可以做一個自己的Class, 再利用這Class做Logging, 能讓程式看起來更簡潔, 不會#ifdef在程式裡面一直重複出現.

例如:
+ (void) log: (NSString *) func: (NSString *) file: (int) line: (NSString *) str{
#ifdef _DEBUG_
NSLog(@"%s:%s:%d:%@", func,file,line, str);
#endif
}

如果有更好的方法, 也請看到的人不吝指教!!

另外找到一篇很cool的方法
http://stackoverflow.com/questions/969130/nslog-tips-and-tricks/969291#969291

#define ALog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);

利用一行#define達成另外一種效果, 真的相當厲害!!

2010年9月7日 星期二

[Mac 指令] 在 Vim 中使用 PageDown PageUp Home End

打開 terminal->偏好設定->鍵盤
把下列按鍵改成右邊的格式, 更改時想寫入\033必須按下"Esc"!!

Home \033[1~
End \033[4~
PageUp \033[5~
PageDown \033[6~

之後操縱用 fn+上下左右 就可以了!!

2010年5月21日 星期五

[iphone開發] (MFMailComposeViewController ) Build Error - missing required architecture i386 in file

使用 MFMailComposeViewController 時不小心弄出來的 bug... 把 MessageUI.framework 直接拉進來以後多複製了一份造成的錯誤, 解決方法就是把多的那份刪掉, 重新在 framework 上面上按 add framework, 依照正常方法加入就沒這問題...

2010年5月20日 星期四

[iphone開發] xcode 底下如何改變 Project 的名稱

這是一個相當麻煩的程序, 有參考網路及官方的方法, 這是簡易改法, 可能還是不夠完善, 如果有問題麻煩補充!!

如果是把名稱從 ProjectOld 改成 ProjectNew

1. 複製整個 project, 把 project 的名稱改成 ProjectNew
2. 打開 project, 把左邊 Groups & Files 裡名稱有 ProjectOld 的全改成 ProjectNew ( 包括 target 及 plist ).
3. 打開 ProjectNewAppDelegate.h 及 ProjectNewAppDelegate.m, 把名字及 include file name 裡面有 ProjectOld 的都改成 ProjectNew.
4. 開啓 Project->Edit Project Setting, 把 General 及 Build 裡面名為 ProjectOld 的資料全改成 ProjectNew.
5. 開啓 Targets 的設定, 也把 General 及 Build 裡面名為 ProjectOld 的資料全改成 ProjectNew.
6. 這部份非常特別.... 開啓終端機, 以下跟 Linux 下的指令很像, 進到 project 的根目錄, 再打入 "cd ProjectNew.xcodeproj", 更改裡面所有的檔案的內容, 只要有 ProjectOld 的字串都改成 ProjectNew, 用 vi 或 vim 開啓可以使用 :%s/ProjectOld/ProjectNew/g 直接替換所有字串.
7. 開啓 .xib 檔案, 有跟 ProjectOldAppDelegate 有關的檔案都要做更改, 把 class 形態從 ProjectOldAppDelegate 改成 ProjectNewAppDelegate, 鏈結也要從新拉, 確保 link 名稱跟 class 名稱的正確.
8. 最後 build clean all target 再 build & run 應該就可以執行了, 再不行就檢查看看前面的步驟是否都有做到.

歡迎高手補充!!!

[iphone開發] "this class is not key value coding - compliant for the key"

使用 TabBarController 碰到的 bug,設定完 TabBarItem 連結到 .xib 的名稱卻沒接著設定它的類型導致 crash,似乎是相當著名的 bug!