2017-02-23 60 views
0

的時候所以,我有點新的OBJ-c和我有一個奇怪的崩潰與下面的代碼發生的事情:Objective-C的程序崩潰添加對象的NSMutableArray

- (NSMutableArray*)followNonBlackPixels:(int)startX withY:(int)startY 
{ 
    NSMutableArray* result; 
    NSMutableArray* adjacents = [self getAdjacents:startX withY:startY]; 

    int r = 0; 
    int i = 0; 
    int tempX; 
    int tempY; 
    int max = [adjacents count]; 
    CGPoint tempPoint; 
    while(i < max) 
    { 
     int tempX = (int)[[adjacents objectAtIndex:i] CGPointValue].x; 
     int tempY = (int)[[adjacents objectAtIndex:i] CGPointValue].y; 

     result = [self getAdjacents:tempX withY:tempY]; 

     for(r = 0; r < [result count]; r++) 
     { 
      tempPoint = [[result objectAtIndex:r] CGPointValue]; 
      //[adjacents addObject:[NSValue valueWithCGPoint:CGPointMake(tempPoint.x, tempPoint.y)]]; 
     } 

     i++; 
     max = [adjacents count]; 
    } 

    return adjacents; 
} 

此代碼運行正常,但只要我取消註釋將對象添加到「相鄰」NSMutableArray的行,那麼該程序就會崩潰。

的getAdjacents方法的簽名如下:

- (NSMutableArray*)getAdjacents:(int)startX withY:(int)startY; 

我正在開發Windows下的一個插件,科爾多瓦,所以我沒有任何調試信息提供...但也許我的錯誤是明顯的給有經驗的obj-c開發人員?

非常感謝您的幫助!

+1

你沒有崩潰日誌?我的猜測是,實際上'adjacents'是一個'NSArray'而不是'NSMutableArray',但這純屬猜測。 – Larme

+1

你確定getAdjacents返回一個* mutable *數組嗎?儘管簽名返回對象可能仍然只是一個NSArray。 –

+0

你可以發佈你的崩潰日誌,所以它很容易找到問題在哪裏? – CodeChanger

回答

1

如果你改變你的代碼下面,

NSMutableArray *adjacents = [[NSMutableArray alloc] initWithArray:[[self getAdjacents:startX withY:startY] mutableCopy]]; 
+0

這並沒有解決這個問題...我試過但仍然崩潰。 – Scalpweb

+0

是否可以向我展示'getAdjacents'的代碼,只是爲了調試一切?令人驚訝的使用'mutableCopy'沒有奏效。你可以發佈什麼崩潰消息,它應該只是在你的控制檯,可能是'無法識別的選擇器'或類似的東西。 – JingJingTao

+0

我無法訪問控制檯,因爲我在Windows下開發。這是一個cordova插件,用Telerik CLI編譯。 – Scalpweb