0

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

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

@end

然后在实现文件中,我alloc init是可变数组:

#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呼叫使应用程序运行良好。我做错了什么会导致应用程序崩溃?

4

6 回答 6

2

这是错误的:

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

你要:

NSLog(@"%u", count);

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

于 2012-04-06T17:39:52.827 回答
1

尝试:

NSLog(@"%i", count);

NSUInteger 返回一个 INT 而不是一个对象地址

于 2012-04-06T17:37:21.450 回答
1
NSLog(@"%@", count); 

错了,用:

NSLog(@"%i", count); 

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

于 2012-04-06T17:38:58.130 回答
1

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

于 2012-04-06T17:49:37.637 回答
0

在我看来,它在尝试打印描述时崩溃了,这是有道理的,因为您%@NSLog().

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

于 2012-04-06T17:40:51.383 回答
0

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

于 2012-04-06T17:43:55.643 回答