Objective-C NSMutableArray Count导致EXC\u访问错误

Objective-C NSMutableArray Count导致EXC\u访问错误,objective-c,nsmutablearray,uipickerview,exc-bad-access,uipopovercontroller,Objective C,Nsmutablearray,Uipickerview,Exc Bad Access,Uipopovercontroller,我已经被困在这个问题上好几天了,每次我回到这个问题上,我总是让我的代码越来越让我自己困惑,哈哈。下面是我要做的。我有一个收费表列表,点击其中一个,打开一个包含收费详细信息的模型视图。现在,当呈现模型时,将创建一个对象来获取用户的XML列表并对其进行解析,然后通过自定义委托返回NSMutableArray。然后我有一个按钮,显示一个选择器popover,当调用popover视图时,用户数组用于对popover视图的initWithArray调用。我知道数组中的数据是正确的,但是当调用[picker

我已经被困在这个问题上好几天了,每次我回到这个问题上,我总是让我的代码越来越让我自己困惑,哈哈。下面是我要做的。我有一个收费表列表,点击其中一个,打开一个包含收费详细信息的模型视图。现在,当呈现模型时,将创建一个对象来获取用户的XML列表并对其进行解析,然后通过自定义委托返回NSMutableArray。然后我有一个按钮,显示一个选择器popover,当调用popover视图时,用户数组用于对popover视图的initWithArray调用。我知道数组中的数据是正确的,但是当调用[pickerUsers count]时,我得到了一个EXC_BAD_访问。我认为这是一个内存/所有权问题,但似乎没有任何帮助。任何帮助都将不胜感激

相关代码片段:

Charge Popover(费用详细信息模型视图):

用户选择器视图控制器

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

如果可能有帮助,我可以提供其他代码。提前感谢。

您将保存阵列的ivar声明为

@property (nonatomic, retain) NSMutableArray *pickerUserList;
但是,您有一个实现如下的方法:

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

您没有保留数据,也没有调用合成的setter。如果您确实构建并分析了这个问题,它会发现这个问题并告诉您。如果没有,请提交一个bug。

这将由:[数据保留]完成;self.pickerUserList=数据;首先,阅读Cocoa内存管理指南。这一点应该很清楚。接下来,构建并分析代码。它应该抓住这个。最后,我将用
self.pickerUserList=数据替换这两行代码来修复它
-(void) JEHWebAPIFetchedUsers:(NSMutableArray *)theData {
    [pickerUserList release];
    pickerUserList = theData;
}