在一个课程中,我使用getter和setter定义NSMutableArray
:
@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
调用会使应用运行正常。我做错了什么会导致应用程序崩溃?
答案 0 :(得分:2)
这是错误的:
NSUInteger count = [arrayClass.array count];
NSLog(@"%@", count);
你想:
NSLog(@"%u", count);
%@
用于指定参数是对象。但是,NSUInteger是原始值,而不是对象。您使用%u
作为无符号整数。
答案 1 :(得分:1)
尝试:
NSLog(@"%i", count);
NSUInteger返回INT而不是对象地址
答案 2 :(得分:1)
NSLog(@"%@", count);
错了,请使用:
NSLog(@"%i", count);
格式语句中的 %@
期望并且必须是对象,NSUInteger
在int中,而不是对象。
答案 3 :(得分:1)
您正在使用%@
格式说明符,仅适用于Cocoa对象,NSUInteger
,它是普通unsigned int
上的typedef。请改用%d,%i或%u。
答案 4 :(得分:0)
在我看来,在尝试打印描述时它会崩溃,这是有道理的,因为您正在使用%@
,NSLog()
中需要一个整数。
另外,使用可变属性几乎总是一个坏主意。如果它确实是一个属性,你可能想要使用一个不可变数组,并在你想要改变它时设置整个数组。
答案 5 :(得分:0)
同意记录计数是错误的,但我认为其他答案错过了一个明显的点:崩溃发生在addObject上。这意味着图像为零。在添加之前的NSLog。