Iphone 数组突然空了

Iphone 数组突然空了,iphone,arrays,uisearchbar,Iphone,Arrays,Uisearchbar,对于UITableView,我使用数组作为数据源。到目前为止一切正常。然而,我有一个奇怪的问题,当我使用搜索字段并输入几个字符,然后再次删除这些字符时,底层数组突然变为空。下面是代码片段,可能与理解我的问题有关: 在my.h.中的声明 @interface dictionaryViewController : UIViewController <UITableViewDelegate>{ ... ... NSMutableArray *cardArray; } ... @

对于UITableView,我使用数组作为数据源。到目前为止一切正常。然而,我有一个奇怪的问题,当我使用搜索字段并输入几个字符,然后再次删除这些字符时,底层数组突然变为空。下面是代码片段,可能与理解我的问题有关:

在my.h.中的声明

@interface dictionaryViewController : UIViewController <UITableViewDelegate>{
...
...
    NSMutableArray *cardArray;

}

...
@property (retain) NSMutableArray *cardArray;
...
我使用SQL DB中的数据填充阵列:

            [self.cardArray addObject:[NSString stringWithFormat:@"%@ - %@", aQuestion, anAnswer]];
在代码中读取数组的内容,如cellForRow方法:

- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
...
thisCardIndex = [self.cardArray indexOfObject:cellValue];
...
}
最后,我发布了它,如下所示(实际上,我对release命令还有一些其他问题,为什么我使用removeObjects):

在日志中,我没有看到错误。然而,调试器显示,代码因SIGABRT而崩溃,当设置断点时,我看到,原因是空的cardArray


提前感谢您的支持。

好的,终于找到了罪魁祸首,就是[myArray版本](请参见下面的评论行)。我不知道为什么。这是一个本地数组,我在本地定义了它,并且应该能够立即释放它。有趣的是,只要搜索范围缩小,这个代码就可以工作。只有当搜索字段再次为空时,它才会崩溃。非常困惑,但也许有人有解释??不管怎么说,终于拿到了,果然如期而至

- (void) searchTableView {

NSString *searchText = searchBar.text;
NSMutableArray *searchArray = [[NSMutableArray alloc] initWithObjects:nil];

for (NSDictionary *dictionary in self.listOfItems) {
    NSArray *myArray = [dictionary objectForKey:@"Cards"];
    [searchArray addObjectsFromArray:myArray];
//[myArray发布]; }


逻辑在某个地方出错..在这里发布整个.m文件..其中的方法是
[self.cardArray removeAllObjects];self.cardArray=nil?也许你应该发布更多的这种方法。发布命令出现问题应该是一个危险信号。不需要调用
removeAllObjects
。将数组属性设置为nil将向其所有对象发送释放。因此,如果您必须调用
removeAllObjects
,您就是在掩盖一个不同的问题。
    [self.cardArray removeAllObjects];
    self.cardArray=nil;
- (void) searchTableView {

NSString *searchText = searchBar.text;
NSMutableArray *searchArray = [[NSMutableArray alloc] initWithObjects:nil];

for (NSDictionary *dictionary in self.listOfItems) {
    NSArray *myArray = [dictionary objectForKey:@"Cards"];
    [searchArray addObjectsFromArray:myArray];
// Counter is needed to get the index of the primary key to dislpay the card in editViewController
int aCounter=0; 
for (NSString *sTemp in searchArray) {
    NSRange titleResultsRange = [sTemp rangeOfString:searchText options:NSCaseInsensitiveSearch];

    if (titleResultsRange.length > 0) {
        [self.aCopyListOfItems addObject:sTemp];
        NSInteger myPrimaryKey;
        myPrimaryKey = [[self.cardIDArray objectAtIndex:aCounter] integerValue];
        [self.aCopyOfCardIDArray addObject:[NSNumber numberWithUnsignedInteger: myPrimaryKey]];
    }
}

[searchArray removeAllObjects];
searchArray = nil;
}