2010-03-22 40 views
0

我試過所有的東西來調試這個,但是我無法得到它的底部。在圖形上下文中調試NSoperation BAD ACCESS

此代碼住在其被從隊列中進行處理的NSOperation的子類:

(邊界是含有5個UIImage的對象的NSArray一個的ivar)


NSMutableArray *images = [[NSMutableArray alloc] init]; 

for (unsigned i = 0; i < 5; i++) 
    {  

    CGSize size = CGSizeMake(60, 60); 
    UIGraphicsBeginImageContext(size); 

    CGPoint thumbPoint = CGPointMake(6, 6); 

    [controller.image drawAtPoint:thumbPoint]; 

    CGPoint borderPoint = CGPointMake(0, 0); 
    [[borders objectAtIndex:i] drawAtPoint:borderPoint]; 

    [images addObject:UIGraphicsGetImageFromCurrentImageContext()]; 

    UIGraphicsEndImageContext(); 

} 

[images release]; 

代碼工作大多數時候都很好,但是當我通過訪問子視圖按下iphone並按下UI上的很多按鈕時,我會得到此操作捕獲的異常:

Exception Load view: *** -[NSCFArray insertObject:atIndex:]: attempt to insert nil 

或我得到這個:

Program received signal: 「EXC_BAD_ACCESS」. 

的異常造成的,因爲UIGraphicsGetImageFromCurrentImageContext()返回零。

我不知道如何調試EXC_BAD_ACCESS,但我猜這個錯誤(實際上這兩個錯誤)是由低內存引起的。調試器停止在該行:

[controller.image drawAtPoint:thumbPoint]; 

正如我所說,我被困例外,所以我可以忍受,但EXC_BAD_ACCESS更嚴重。

如果這是與內存相關的問題,我該如何判斷並且可以增加NSOperation的可用內存?

回答

1

在主線程或後臺線程上處理NSOperationQueue嗎?如果後者你不能做任何圖形上下文的東西(或有時你有時你不會)。

+0

它在後臺線程上(好的隊列在主線程上處理,但操作在後臺運行),代碼工作時間爲90%,只有當我開始敲擊失敗的UI時纔會工作。爲什麼我不能在背景線上做圖形上下文? – Joe 2010-03-22 18:29:38

+0

CoreGraphics調用通常可以,但UI調用(例如'UIGraphicsBeginImageContext')通常只能從主線程調用。我沒有更詳細的細節,但你可能會在這裏獲得更多信息:http://www.iphonedevsdk.com/forum/iphone-sdk-development/13963-background-threads-graphics.html – philsquared 2010-03-22 18:34:08

+0

如果你可以重鑄你的使用'CGBitmapContext'的代碼你可能會解決你的問題。 – philsquared 2010-03-22 18:37:55