在我的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:
我该怎么办?
请帮助
请建议
由于
答案 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数组。
为什么要在添加每个对象后保留相同的数组?