Objective-C NSMutableArray Count Причины EXC_BAD_ACCESS - PullRequest
1 голос
/ 20 мая 2010

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

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

Charge Popover (представление модели деталей зарядки):

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

Контроллер представления выбора пользователя

@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];
}

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

1 Ответ

3 голосов
/ 20 мая 2010

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

@property (nonatomic, retain) NSMutableArray *pickerUserList;

Но тогда у вас есть метод, реализованный следующим образом:

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

Вы не удерживаете theData и не вызываете синтезированный сеттер. Если вы сделали Построить и проанализировать , он должен поймать эту проблему и рассказать вам об этом. Если нет, сообщите об ошибке.

...