2010-08-02 2 views
0

Я сделал свой собственный класс, производный от NSObject, и вот мой код:iphone EXC_BAD_ACCESS используя свой собственный класс

-(void) parseRow:(NSDictionary*) dictionary { 
    NSArray* arName = [[dictionary valueForKey:displayname] componentsSeparatedByString:@"+"]; 
    [self setDriverName:[arName objectAtIndex:0]]; 
    [self setDriverSurname:[arName objectAtIndex:1]]; 
    [arName release]; // this give problem! 
} 

и на мой взгляд:

driverStats = [[DriverStats alloc] init]; 

// driverStats is declared in the header: 
DriverStats* driverStats; 
@property (nonatomic,retain) DriverStats* driverStats; 

[driverStats parseRow:dictionary]; 

Если добавить [arName релиз] в моем классе, когда я выхожу из метода parseRow, у меня есть ошибка EXC_BAD_ACCESS .... но это неправильно? Я использовал массив и после того, как я выпустил ... Я думаю, что ошибка будет, если я не выпустил указатель .. или нет ??? Заранее спасибо

ответ

6

Проблема легко решить. В вашем массиве NSArray * есть 0 saveCount. Поскольку вы используете компонент фабричного методаSeparatedByString :, он снова возвращает вам автореализованный массив. Таким образом, вам больше не нужно выпускать свой массив.

Еще одна вещь, вы должны заботиться о является setDriverName: и setDriverSurname :, убедитесь, что вы сохранить/копировать объект там в противном случае, когда массив будет отпущена, эти объекты также выпустили и EXEC_BAD_ACCESS снова

+0

, что должно быть верный. Итак, вам больше не нужно беспокоиться о сеттере :) – vodkhang