【问题标题】:Objective-c program crashes when adding object to NSMutableArray向 NSMutableArray 添加对象时,Objective-c 程序崩溃
【发布时间】:2017-07-13 23:42:08
【问题描述】:

所以,我是 Obj-c 的新手,我在以下代码中发生了奇怪的崩溃:

- (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 下开发一个 Cordova 插件,所以我没有任何调试信息可提供...但是对于有经验的 obj-c 开发人员来说,我的错误可能会很清楚吗?

非常感谢您的帮助!

【问题讨论】:

  • 您没有崩溃日志?我的猜测是事实上adjacentsNSArray 而不是NSMutableArray,但这纯粹是猜测。
  • 你确定 getAdjacents 返回一个 mutable 数组吗?尽管有签名,但返回的对象可能仍然只是一个 NSArray。
  • 您能否发布您的崩溃日志,以便轻松找到问题所在?
  • 你可以试试NSMutableArray* adjacents = [[NSMutableArray alloc] initWithArray: [self getAdjacents:startX withY:startY]];然后在初始化的时候检查一下吗?
  • 我找不到任何崩溃日志,不...无论如何都没有任何相关信息。我尝试了您的解决方案@SaurabhYadav,但没有运气......我确定 getAdjacents 返回一个可变数组,因为它以 NSMutableArray* adjacents = [[NSMutableArray alloc] init]; 开头并在填充后返回该数组。

标签: ios objective-c cordova crash nsmutablearray


【解决方案1】:

如果您将代码更改为以下内容,

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

【讨论】:

  • 这并不能解决问题...我试过了,但还是崩溃了。
  • 是否可以向我显示“getAdjacents”的代码,以便我调试所有内容?令人惊讶的是,使用“mutableCopy”并没有奏效。您能否发布崩溃消息是什么,它应该只是在您的控制台中,可能是“无法识别的选择器”或类似的东西。
  • 我在 windows 下开发时无法访问控制台。这是一个 Cordova 插件,使用 Telerik CLI 编译。
  • 如果没关系,我们可以继续聊天,chat.stackoverflow.com/rooms/135918/ios
  • @Scalpweb 这个解决方案真的解决了这个问题吗?你上面的 cmets 暗示它没有。如果您已经解决了问题,请发布一个记录修复的答案,否则该答案对于其他找到它的用户毫无用处。如果此答案确实解决了问题,请编辑您之前的评论或添加新评论。
猜你喜欢
  • 1970-01-01
  • 2012-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多