数组突然变空了

时间:2012-03-19 19:55:04

标签: iphone arrays uisearchbar

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

我的.h

中的声明
@interface dictionaryViewController : UIViewController <UITableViewDelegate>{
...
...
    NSMutableArray *cardArray;

}

...
@property (retain) NSMutableArray *cardArray;
...

我的.m代码中的用法:

@synthesize cardArray;
...

- (void)viewDidLoad {
[super viewDidLoad];
self.cardArray = [[NSMutableArray alloc] initWithObjects:nil];
...
}

我使用SQL DB中的数据填充数组:

            [self.cardArray addObject:[NSString stringWithFormat:@"%@ - %@", aQuestion, anAnswer]];

在代码中读取数组的内容,就像在cellForRow方法中一样:

- (UITableViewCell *)tableView:(UITableView *)aTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
...
thisCardIndex = [self.cardArray indexOfObject:cellValue];
...
}

最后我发布它,就像这样(我实际上在发布命令中遇到了一些其他问题,为什么我使用了removeObjects):

    [self.cardArray removeAllObjects];
    self.cardArray=nil;

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

感谢您的支持。

1 个答案:

答案 0 :(得分:0)

好吧,终于找到了罪魁祸首,那是[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 release];     }

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