2012-04-06 2 views
0

В одном классе, я устанавливаю NSMutableArray с добытчиками и сеттеров:NSMutableArray сбоями App

@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); 

%@ в формате оператора ожидает и должно быть object, NSUInteger находится в int, а не в объекте.

0

Похоже, что это сбой при попытке распечатать описание, что имеет смысл, потому что вы используете %@, где ожидается целое число в вашем NSLog().

Отдельно, используя изменчивое свойство, почти всегда плохая идея. Если это действительно свойство, вы, вероятно, захотите использовать неизменяемый массив и установите весь массив, когда хотите его изменить.

0

Согласитесь, что регистрация счетчика неверна, но я думаю, что другие ответы пропускают очевидную точку перехода: авария происходит в addObject. Это означает, что изображение равно нулю. NSLog, что перед добавлением.

+0

На самом деле, NSLog был источником сбоя. Должен был сузить мой вопрос больше. –

1

Вы используете спецификатор формата %@, который предназначен только для объектов Cocoa, для NSUInteger, который является типичным для обычного unsigned int. Вместо этого используйте% d,% i или% u.

Смежные вопросы