2012-04-06 66 views
0

在一類,我與getter和setter限定NSMutableArray的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所示: enter image description here

卸下addObject調用使應用程序運行正常。我做錯了什麼會導致應用程序崩潰?

回答

2

這是錯誤的:

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

你想:

NSLog(@"%u", count); 

%@是用來指定該參數是一個對象。但是,NSUInteger是一個原始值,而不是一個對象。您使用%u作爲未簽名的整數。

1

嘗試:

NSLog(@"%i", count); 

NSUInteger返回一個int不是一個對象地址

1
NSLog(@"%@", count); 

是錯誤的,使用:

NSLog(@"%i", count); 

%@格式語句要求,並且必須爲對象,NSUInteger在int中,而不是對象。

0

它在我看起來像它試圖打印說明時崩潰,這是有道理的,因爲您使用%@其中一個整數在您的NSLog()預計。

另外,使用可變屬性幾乎總是一個壞主意。如果它真的是一個屬性,那麼你可能想要使用一個不可變的數組,並且當你想改變它時設置整個數組。

0

同意計數的記錄是錯誤的,但我認爲其他答案錯過了一個明顯的觀點:崩潰發生在addObject上。這意味着圖像是零。 NSLog之前添加。

+0

實際上,NSLog是崩潰的來源。應該更多地縮小我的問題。 – 2012-04-06 17:45:26

1

您使用的是%@格式說明,這是唯一的Cocoa對象,對於NSUInteger,這是一個普通的unsigned int一個typedef。改爲使用%d,%i或%u。

相關問題