需要更多信息,但是如果我正确地解释了您所做的事情,那么您似乎正在从对象中提取名称字符串,然后使用这些名称字符串填充一个数组作为 UITableView 的数据源。然后,您尝试从名称向后工作以获取原始对象。
如果是这种情况,为什么不直接用原始对象填充数组来支持数据存储,那么您可以根据 UITableView 的选定行轻松逐行获取对象。您只需要更新设置单元格内容的位置即可从对象中提取名称字段,而不是从单独的数组中提取。
例子:
// Defined in your class interface:
NSMutableArray *searchResults = [[NSMutableArray alloc] init];
NSMutableArray *myArray; // contains all of your objects, could be a dictionary as well
- (void) searchTableView {
NSString *searchText = searchBar.text;
NSMutableArray *searchArray = [[NSMutableArray alloc] init];
[searchArray addObjectsFromArray:myArray];
for (myObject *anObject in searchArray) {
NSString *objectName = [myObject name];
NSRange resultsRange = [objectName rangeOfString:searchText options:NSCaseInsensitiveSearch];
if (resultsRange.length > 0)
[searchResults addObject:anObject];
}
searchArray = nil;
}
在这里,我们从所有对象的数组 myArray 开始(如果它们存储在 Dictionary 中,只需在下一步中转换为数组)。
一个新数组 searchArray 填充了主数组(如图所示)或字典(附加转换)中的所有对象。
在循环中,将 searchArray 中每个对象的名称字段与 searchBar 中的文本进行比较。如果 name 字段中存在 searchBar 内容,则将该对象添加到结果数组 searchResults。
使用 searchResults 作为 UITableView 的数据源,将每个单元格的文本设置为 searchResults 中相应对象的名称。现在 UITableView 的每一行都与您的对象直接相关。
请注意,我最初是通过以下站点学习此方法的。我建议完成他们的教程 - 它很快并且演示了与搜索设置结合使用的其他一些不错的功能。release
请注意,它是在 ARC 之前编写的,因此假设您使用的是 ARC,您需要省略一些语句等。