2017-02-23 37 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