【问题标题】:NSMutableArray Crashing AppNSMutableArray 崩溃应用
【发布时间】:2012-04-06 17:33:10
【问题描述】:

在一个类中,我用 getter 和 setter 定义了一个 NSMutableArray

@interface ArrayClass : NSObject {
    NSMutableArray *array;
}
@property (nonatomic, strong) NSMutableArray *array;

@end

然后在实现文件中,我allocinit可变数组:

#import "ImageUploader.h"

@implementation ArrayClass
@synthesize array;

- (id)init {
    self = [super init];
    if (self != nil) {
        NSLog(@"ArrayClass inited");
        array = [[NSMutableArray alloc] init];
    }
    return self;
}

@end

然后我从另一个类初始化这个类的一个实例:

ArrayClass *arrayClass = [[ArrayClass alloc] init];
                [arrayClass.array addObject:image];
                NSUInteger count = [arrayClass.array count];
                NSLog(@"%@", count);

但是当我尝试将对象添加到可变数组时,应用程序崩溃并且 Xcode 4.3 显示:

删除addObject 调用可使应用正常运行。我做错了什么会导致应用崩溃?

【问题讨论】:

    标签: iphone objective-c ios crash nsmutablearray


    【解决方案1】:

    这是错误的:

    NSUInteger count = [arrayClass.array count];
    NSLog(@"%@", count);
    

    你想要:

    NSLog(@"%u", count);
    

    %@ 用于指定参数是一个对象。然而,一个 NSUInteger 是一个原始值,而不是一个对象。对于无符号整数,您使用 %u

    【讨论】:

      【解决方案2】:

      尝试:

      NSLog(@"%i", count);
      

      NSUInteger 返回一个 INT 而非对象地址

      【讨论】:

        【解决方案3】:
        NSLog(@"%@", count); 
        

        错了,用:

        NSLog(@"%i", count); 
        

        格式语句中的%@ 期望并且必须是对象,NSUInteger 在 int 中,而不是对象。

        【讨论】:

          【解决方案4】:

          您正在使用 %@ 格式说明符,它仅用于 Cocoa 对象,用于 NSUInteger,它是普通 unsigned int 上的 typedef。请改用 %d、%i 或 %u。

          【讨论】:

            【解决方案5】:

            在我看来,它在尝试打印描述时崩溃了,这是有道理的,因为您使用的是 %@,而您的 NSLog() 中需要一个整数。

            另外,使用可变属性几乎总是一个坏主意。如果它真的是一个属性,你可能想使用一个不可变数组,并在你想改变它的时候设置整个数组。

            【讨论】:

              【解决方案6】:

              同意计数的记录是错误的,但我认为其他答案错过了一个明显的点:崩溃发生在 addObject 上。这意味着 image 为零。 NSLog 之前添加。

              【讨论】:

              • 实际上,NSLog 是崩溃的根源。应该进一步缩小我的问题范围。
              猜你喜欢
              • 2012-03-18
              • 2011-07-11
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-01-27
              • 1970-01-01
              相关资源
              最近更新 更多