1

Я застрял на этом в течение нескольких дней, и каждый раз, когда я возвращаюсь к нему, я все время делаю свой код более запутанным для себя, lol. Вот что я пытаюсь сделать. У меня есть таблица списков сборов, я нажимаю один и поднимает модельный вид с подробной информацией. Теперь, когда модель представлена, создается объект для извлечения списка пользователей XML и его анализа и возвращает NSMutableArray через пользовательский делегат. Затем у меня есть кнопка, которая представляет собой сборщик popover, когда вид popover называется массивом пользователя, используется в вызове initWithArray для представления popover. Я знаю, что данные в массиве правы, но когда вызывается [pickerUsers count], я получаю EXC_BAD_ACCESS. Я предполагаю, что это проблема памяти/собственности, но ничего не помогает. Любая помощь будет оценена по достоинству.Objective-C NSMutableArray Count Causes EXC_BAD_ACCESS

Соответствующие фрагменты кода:

Charge поповер (Charge детали модели вид):

@interface ChargePopoverViewController ..... 
NSMutableArray *pickerUserList; 
@property (nonatomic, retain) NSMutableArray *pickerUserList; 

@implementation ChargePopoverViewController 
@synthesize whoOwesPickerButton, pickerUserList; 
- (void)viewDidLoad { 
    JEHWebAPIPickerUsers *fetcher = [[JEHWebAPIPickerUsers alloc] init]; 
    fetcher.delegate = self; 
    [fetcher fetchUsers]; 
} 
-(void) JEHWebAPIFetchedUsers:(NSMutableArray *)theData { 
    [pickerUserList release]; 
    pickerUserList = theData; 
} 
- (void) pickWhoPaid: (id) sender { 
    UserPickerViewController* content = [[UserPickerViewController alloc] initWithArray:pickerUserList]; 
    UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:content]; 
    [popover presentPopoverFromRect:whoPaidPickerButton.frame inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
    content.delegate = self;  
} 

пользователя Picker View Controller

@interface UserPickerViewController ..... 
NSMutableArray *pickerUsers; 
@property(nonatomic, retain) NSMutableArray *pickerUsers; 

@implementation UserPickerViewController 
@synthesize pickerUsers; 
-(UserPickerViewController*) initWithArray:(NSMutableArray *)theUsers { 
    self = [super init]; 

    if (self) { 
     self.pickerUsers = theUsers; 
    } 

    return self; 
} 
- (NSInteger)pickerView:(UIPickerView *)thePickerView numberOfRowsInComponent:(NSInteger)component { 
    // Dies Here EXC_BAD_ACCESS, but NSLog(@"The content of array is%@",pickerUsers); shows correct array data 
    return [pickerUsers count]; 
} 

Я могу предоставить дополнительный код, если это может помочь. Заранее спасибо.

ответ

3

Вы объявляете Ивар, удерживающий массив как это ...

@property (nonatomic, retain) NSMutableArray *pickerUserList; 

Но тогда вы метод реализован так:

-(void) JEHWebAPIFetchedUsers:(NSMutableArray *)theData { 
    [pickerUserList release]; 
    pickerUserList = theData; 
} 

Вы не сохраняя theData и вы Арен» t вызов синтезированного сеттера. Если вы сделали Сборка и анализ, он должен поймать эту проблему и рассказать вам об этом. Если нет, укажите ошибку.

+0

Будет ли это достигнуто путем: [Сохранение данных]; self.pickerUserList = theData; – JoshEH

+1

Во-первых, прочитайте руководство по управлению памятью какао. Из этого следует ясно. Затем создайте и проанализируйте свой код. Это должно поймать это. Наконец, я исправлю это, заменив эти две строки кода на 'self.pickerUserList = theData;' – bbum