2013年7月19日 星期五

移除所有 .svn

真的覺得svn不是很好用,
想要移除svn時控管時,
必須要刪除所有資料夾下的.svn,
但是資料夾多的時候真的會刪到手軟。

在Mac 終端機中,先切換到專案資料夾,
然後輸入:
find . -name ".svn" -exec rm -rf {} \; 
這樣就能刪光光啦!

2013年6月21日 星期五

錯誤訊息:
Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.

原來手腳太快也是會有問題的,
在使用navigation時,要注意push的間隔,
如果在很短的時間連續push就會發生上述錯誤,
這時候記得延遲一下就可以解決這問題的。

可以用這個來解決:
// 在原先要push的地方加上,取代原先的push
[self performSelector:@selector(showView) withObject:nil afterDelay:0.7];

// Push View
- (void)showView{

    UIViewController *viewController = [[UIViewController alloc] initWithNibName:@"UIViewController" bundle:nil];
    [self.navigationController pushViewController:viewController animated:YES];
}
參考文件:
http://www.cocoachina.com/bbs/read.php?tid=110206

2013年6月17日 星期一

Debug Area Commands

在Debug Area中可以輸入help後,列出的Commands有以下這些,
不過我認為應該是不只啦!先記錄下來。
後面有找到在另外補充。

The following is a list of built-in, permanent debugger commands:

_regexp-attach    -- Attach to a process id if in decimal, otherwise treat the
                     argument as a process name to attach to.
_regexp-break     -- Set a breakpoint using a regular expression to specify the
                     location, where  is in decimal and 
is in hex. _regexp-bt -- Show a backtrace. An optional argument is accepted; if that argument is a number, it specifies the number of frames to display. If that argument is 'all', full backtraces of all threads are displayed. _regexp-display -- Add an expression evaluation stop-hook. _regexp-down -- Go down "n" frames in the stack (1 frame by default). _regexp-tbreak -- Set a one shot breakpoint using a regular expression to specify the location, where is in decimal and
is in hex. _regexp-undisplay -- Remove an expression evaluation stop-hook. _regexp-up -- Go up "n" frames in the stack (1 frame by default). apropos -- Find a list of debugger commands related to a particular word/subject. breakpoint -- A set of commands for operating on breakpoints. Also see _regexp-break. command -- A set of commands for managing or customizing the debugger commands. disassemble -- Disassemble bytes in the current function, or elsewhere in the executable program as specified by the user. expression -- Evaluate a C/ObjC/C++ expression in the current program context, using user defined variables and variables currently in scope. frame -- A set of commands for operating on the current thread's frames. gdb-remote -- Connect to a remote GDB server. If no hostname is provided, localhost is assumed. help -- Show a list of all debugger commands, or give details about specific commands. kdp-remote -- Connect to a remote KDP server. udp port 41139 is the default port number. log -- A set of commands for operating on logs. memory -- A set of commands for operating on memory. platform -- A set of commands to manage and create platforms. plugin -- A set of commands for managing or customizing plugin commands. process -- A set of commands for operating on a process. quit -- Quit out of the LLDB debugger. register -- A set of commands to access thread registers. script -- Pass an expression to the script interpreter for evaluation and return the results. Drop into the interactive interpreter if no expression is given. settings -- A set of commands for manipulating internal settable debugger variables. source -- A set of commands for accessing source file information target -- A set of commands for operating on debugger targets. thread -- A set of commands for operating on one or more threads within a running process. type -- A set of commands for operating on the type system version -- Show version of LLDB debugger. watchpoint -- A set of commands for operating on watchpoints. For more information on any particular command, try 'help '.

iOS 6 Status Bar Color

在iOS 6,Status Bar的顏色會改變,
原來是受到了Navigation Bar顏色的影響,
之前都沒有注意到這個狀況。

這是為了讓App與整體更加融合,
不過話說回來這功能有時候也是會挺困擾的。
調整的方式如下:
在這邊改變一下設定就行啦!
如果是Default,在iOS 6系統會自動變更Status Bar顏色,iOS 6以下版本則不會。
附上相關程式設定
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleDefault];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent];
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque];

參考資料:
http://blog.jiwo.in/post/28621527054
http://stackoverflow.com/questions/12931749/status-bar-color-in-ios-6

2013年6月11日 星期二

Multi Thread 散記

UI更新必須在主線程
很多文章使用detachNewThreadSelector或performSelectorInBackground啓動Thread,
然後呼叫performSelectorOnMainThread,通知主線程更新UI。
// 主線程呼叫
[self performSelectorInBackground:<#(SEL)#> withObject:<#(id)#>];
[NSThread detachNewThreadSelector:<#(SEL)#> toTarget:<#(id)#> withObject:<#(id)#>];
// 更新UI
[self performSelectorOnMainThread:<#(SEL)#> withObject:<#(id)#> waitUntilDone:<#(BOOL)#>];

使用NSOperationQueue的過程:
  1. 建立一个NSOperationQueue的實體 
  2. 建立一个NSOperation的實體 
  3. 將operation加入到NSOperationQueue中 
  4. release掉operation

2013年6月5日 星期三

2013年5月29日 星期三

XCode Snippets

一直以為XCode是沒有提供Snippets的,
沒想到搜尋發現,錯很大啊!

這是Youtube搜尋到的教學,
沒想到竟然如此簡單啊!

另外紀錄一下Snippets存放的路經,
方便日後備份
~/Library/Developer/Xcode/UserData/CodeSnippets

PS:我XCode 版本是4.6.2,比較舊的版本路徑可能會有些不同要注意噢!

=== 補充 ===
補上自制Snippets Sync相關路徑,這是透過Dropbox的方式。
http://stackoverflow.com/questions/5261076/how-can-one-transfer-xcode-4-code-snippets-from-one-machine-to-another

2013年5月13日 星期一

Storyboard 入門文章整理

這邊將這兩週所閱讀的文章進行個簡單的整理,方便日後搜尋。

dismiss 與 present

畫面切換的method在iOS6.0之後有些許的調整,
目前在使用上是沒有問題的,就是換出現警告。

dismissViewControllerAnimated:completion: 取代 dismissModalViewControllerAnimated: presentViewController:animated:completion: 取代 presentModalViewController:animated:

Cell 使用不同的背景

之前工作上有個需求,希望第一跟最後一個Cell能加上陰影,
當時沒想出解決的方法。

今天看到下面這篇文章, 覺得這方式也不錯,或許是個方式,這邊記錄一下。
有機會再來試一下。

http://www.appcoda.com/ios-programming-customize-uitableview-storyboard
- (UIImage *)cellBackgroundForRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSInteger rowCount = [self tableView:[self tableView] numberOfRowsInSection:0];
    NSInteger rowIndex = indexPath.row;
    UIImage *background = nil;
    
    if (rowIndex == 0) {
        background = [UIImage imageNamed:@"cell_top.png"];
    } else if (rowIndex == rowCount - 1) {
        background = [UIImage imageNamed:@"cell_bottom.png"];
    } else {
        background = [UIImage imageNamed:@"cell_middle.png"];
    }
    
    return background;
}

2013年5月7日 星期二

Storyboard 相關資訊及注意事項

Storyboard需iOS 5、XCode 4.2以上版本才開始支援。
  1. 其基礎為xib,增加其功能,與xib最明顯不同處在一個xib檔,僅代表一個screen,而一個strotyboard可包含多個screen。
  2. 一個專案中不限制只能有一個Storyboard檔案,可多個檔案並存,但若此取此方式,這可能就失去Storyboard其原有的意義了。
    但是,若同時支援iPhone與iPad,Storyboard需分別使用不同的Storyboard檔案,並在info.plist中進行相關設定。
  3. 採用Storyboard的專案除可使用Storyboard進行開發之外,也可同時使用xib進行開發
  4. 在view controller切換,除了以原先以model或是navigate controller push的方式之外,另外增加了以segue方式切換。
注意事項:
  1. 採取Storyboard多人協同開發,並進行版本控制時,與xib有想同的問題,若同時對同一檔案維護時,可能會發生衝突問題。
  2. 另外,在iOS 6與iPhone 5釋出時,為配合iPhone 5 4吋螢幕,Storyboard增加了Autolayout功能,但該功能限制要最低版本為iOS 6以上,若在iOS 5編譯時程式會直接crash。

2013年3月11日 星期一

- drawRect: CGRectInset

最近用到了一個指令
CGRectInset(CGRect rect, CGFloat dx, CGFloat dy)
老是搞不清楚運作的方式
所以做了個實驗並將果記錄下來

rect = (0, 0 ,320, 480)
     
     CGRectInset(rect, 0, 0)    =>    x = 0.000000,   y = 0.000000,   width = 320.000000, height = 480.000000
     CGRectInset(rect, 10, 0)   =>    x = 10.000000,  y = 10.000000,  width = 300.000000, height = 480.000000
     CGRectInset(rect, 20, 0)   =>    x = 20.000000,  y = 20.000000,  width = 280.000000, height = 480.000000
     CGRectInset(rect, 0, 10)   =>    x = 0.000000,   y = 0.000000,   width = 320.000000, height = 460.000000
     CGRectInset(rect, 0, 20)   =>    x = 0.000000,   y = 0.000000,   width = 320.000000, height = 440.000000
     CGRectInset(rect, 10, 20)  =>    x = 10.000000,  y = 10.000000,  width = 300.000000, height = 440.000000
    
     CGRect newRect = CGRectInset(CGRect rect, CGFloat dx, CGFloat dy)
     
     newRect.origin.x = dx;
     newRect.origin.y = dx;
     newRect.size.width = rect.size.wide - dy * 2
     newRect.size.height = rect.size.height - dy * 2

2013年2月26日 星期二

錯誤訊息_2013-02-26

*** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__nsarraym: data-blogger-escaped-0x75828d0=""> was mutated while being enumerated.'
*** First throw call stack:
(0x15a1012 0x12aee7e 0x1629cc5 0x3ec3 0x12c2705 0x1f62c0 0x1f6258 0x2b7021 0x2b757f 0x2b66e8 0x225cef 0x225f02 0x203d4a 0x1f5698 0x2603df9 0x2603ad0 0x1516bf5 0x1516962 0x1547bb6 0x1546f44 0x1546e1b 0x26027e3 0x2602668 0x1f2ffc 0x2bdd 0x2b05)
libc++abi.dylib: terminate called throwing an exception

今天遇到了一個問題
Google "NSGenericException"之後找到了問題
起因是因為我要刪除Array中某元素所造成

這問題主因簡單來說就是太多層了
系統來不及反映所導致

比如說:我要刪除 a.array[0].array[1]
這樣就有可能會發生問題

2013年2月23日 星期六

Responds To Selector

在@select時
如果沒有選好常會有當掉的狀況
搜尋了一下
有篇文章的方法不錯記錄下來
http://blog.csdn.net/dongdongdongjl/article/details/8498555

使用respondsToSelector@select(Method)
來判斷是否有此Method
這樣就比較不會當掉了

iOS5 Deprecated Method

在iOS6推出之後有些Method被廢棄了
在這紀錄iOS5 Deprecated Method
然後應該換用的Method

//Deprecated
self presentModalViewController:(UIViewController *) animated:(BOOL)
//改用
self presentViewController:(UIViewController *) animated:(BOOL) completion:^(void)completion

2013年2月22日 星期五

弧度角度轉換

老是忘記角度轉換
紀錄一下

角度轉換弧度
Degrees * PI /180 = Radians

弧度轉換角度
Radians * 180 /PI = Degrees

參考:wiki 弧度

Core Graphics Note

零散地記錄一下Core Graphics相關的筆記

方便日後搜尋

//繪製弧形使用
CGContextAddArc
(
CGContextRef c, //繪製本文
CGFloat x,
CGFloat y, //圓心(x, y)
CGFloat radius, //半徑
CGFloat startAngle, //開始角度,輸入為弧度角
CGFloat endAngle, //結束角度,輸入為弧度角
int clockwise //順時鐘為1、逆時鐘為0,
)