即使在设置属性后,NSMutableArray也不保留该值

时间:2010-11-13 09:25:37

标签: iphone objective-c cocoa-touch ios4 uisearchbar

在我的iphone应用程序中,我在TableView上实现了SearchBar。

现在SearchBar搜索项目,但搜索的项目不会显示在tableview中,因为NSMutableArray填满表格,搜索结果不保留值。

我已经把代码的截图和NSLog语句的copyListOfItems的计数总是返回0,即使是NSLog(@“%@”,sTemp);在控制台中显示搜索到的项目。

我已经为NSMutableArray copyListOfItems创建了属性并且还合成了它,但它在控制台中的计数始终显示为零。

以下是代码:

        searchArray = [Food mutableCopy];

for (NSString *sTemp in searchArray)

     {
    NSLog(@"Value: %@",NSStringFromClass([sTemp class]));

              NSRange titleResultsRange = [sTemp rangeOfString:searchText options:NSCaseInsensitiveSearch];

    if (titleResultsRange.length > 0)
    {
        NSLog(@"sTemp is:%@",sTemp);
        NSLog(@" is:%@",sTemp);
        [copyListOfItems addObject:sTemp];
        [copyListOfItems retain];

    }
         NSLog(@"Copy list count in Search Delegate Method inside For : %d",[copyListOfItems count]);
}
NSLog(@"Copy list count in Search Delegate Method : %d",[copyListOfItems count]);
[searchArray release];
searchArray = nil;
searching = YES;
[self.table reloadData];

de:

alt text

我该怎么办?

请帮助

请建议

由于

5 个答案:

答案 0 :(得分:2)

从你所说的,听起来似乎永远不会创建copyListOfItems数组。合成属性会创建一对存取方法,但不会自动为您创建NSMutableArray的实例。

所以在某个地方,您需要调用[[NSMutableArray alloc] init](或init...的某些变体),并将结果分配给实例变量,或调用[NSMutableArray array](或者变体array...),并将结果作为参数传递给setCopyListOfItems:方法。

答案 1 :(得分:1)

我只能假设你过度释放了数组中的项目。看来你没有很好地掌握保留/释放概念,因为你过度保留了NSArray copyListOfItems。您不应该在循环内的同一个对象上调用-retain,因为对于循环的每次迭代,您将单个对象的保留计数递增1。

除此之外,这个代码在NSLog()调用中输出了什么?它没有多大意义。为什么你试图获取一个名为Food的类的可变副本(似乎是什么)?

究竟什么是“食物”?一个Objective-C对象,还是一个Objective-C类?在我看来,这根本不应该编译,除非它的名字非常糟糕。

答案 2 :(得分:1)

确保始终为init赋予NSMutableArray。如果你不那样做,那么你添加的所有项目都将只是euhm ..消失。所以请确保你在某个地方这样做:

searchArray = [[NSMutableArray alloc] init];

答案 3 :(得分:1)

糟糕.. !!!!清理了我的项目并重新构建并运行它已经开始工作了。谢谢你们这么有帮助..:]

答案 4 :(得分:0)

你在哪里创建copyListOfItems数组?

我猜copyListOfItems是零。而你正试图在nil数组中添加一些内容并尝试保留nil。

注意:无论你在nil上做什么操作都不会受到影响。检查是否正确创建了copyListOfItems数组。

为什么要在添加每个对象后保留相同的数组?