[英]NSMutableArray Crashing App
在一个 class 中,我定义了一个带有 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
然后我从另一个 class 初始化这个 class 的实例:
ArrayClass *arrayClass = [[ArrayClass alloc] init];
[arrayClass.array addObject:image];
NSUInteger count = [arrayClass.array count];
NSLog(@"%@", count);
但是当我尝试将 object 添加到可变数组时,应用程序崩溃并且 Xcode 4.3 显示:
删除addObject
调用会使应用程序运行良好。 我做错了什么会导致应用程序崩溃?
这是错误的:
NSUInteger count = [arrayClass.array count];
NSLog(@"%@", count);
你要:
NSLog(@"%u", count);
%@
用于指定参数为 object。但是,NSUInteger 是原始值,而不是 object。您将%u
用于无符号整数。
尝试:
NSLog(@"%i", count);
NSUInteger 返回一个 INT 而不是 object 地址
NSLog(@"%@", count);
错了,使用:
NSLog(@"%i", count);
格式语句中的%@
需要并且必须是 object, NSUInteger
是 int,而不是 object。
您正在使用%@
格式说明符,它仅适用于 Cocoa 对象,用于NSUInteger
,它是普通unsigned int
上的 typedef。 请改用 %d、%i 或 %u。
在我看来,它在尝试打印描述时崩溃了,这是有道理的,因为您使用的是%@
,其中NSLog()
中需要 integer 。
另外,使用可变属性几乎总是一个坏主意。 如果它真的是一个属性,您可能希望使用不可变数组,并在您想要更改它时设置整个数组。
同意计数的记录是错误的,但我认为其他答案遗漏了一个明显的点:崩溃发生在 addObject 上。 这意味着图像为零。 NSLog 在添加之前。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.