繁体   English   中英

NSMutableArray 崩溃应用程序

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM