0

我有这样的数据......(所有数据都来自 .plist 文件......)

Searching Array - (
        {
        FirstName = "Ramesh";
        LastName = "Bean";
        EmpCode = 1001;
    },
        {
        FirstName = "Rohan";
        LastName = "Rathor";
        EmpCode = 102;
    },
        {
        FirstName = "Priya";
        LastName = "Malhotra";
        EmpCode = 103;
    },
        {
        FirstName = "Mukesh";
        LastName = "Sen";
        EmpCode = 104;
    },
        {
        FirstName = "Priya";
        LastName = "Datta";
        EmpCode = 105;
    }

)

我想根据名字(键)从这个数组中实现搜索数据。

我可以使用“FirstName(Key)”搜索数据

但是在过滤数据之后假设我点击了显示在 TableView 中的行(在数据中)。它使用该特定员工的所有信息(例如:FirstName、LastName、EmpCode)将我导航到 New-Controller。

我怎样才能得到信息?

当我浏览搜索示例代码时。

这是我的搜索代码...

NSString *searchText = searchBar.text;
    NSMutableArray *searchArray = [[NSMutableArray alloc] init];
    NSInteger TotalNoOfRecords=[self.SearchtableDataSource count];

    for (int i=0;i<TotalNoOfRecords;i++)
    {   NSDictionary *dictionary = [self.SearchtableDataSource objectAtIndex:i];
        NSArray *array = [dictionary objectForKey:@"FirstName"];


        [searchArray addObject:array];


    }
    for (NSString *sTemp in searchArray)
    {

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

        if (titleResultsRange.length > 0)
        {
                [copyListOfItems addObject:sTemp];

        }
    }

我该如何改进这段代码?....请指导我... [searchArray release]; 搜索数组 = 无;

我们如何维护 searchArray 中的所有“Keys(FirstName,LastName,EmpCode)”请帮帮我?谢谢...

4

1 回答 1

0

使用 NSPredicate。

searchArray 是您在 NSArray 中的 plist。从 searchArray 中创建一个新的 searchArray2,然后使用 NSPredicate 对其进行过滤。

searchArray2 = [[NSMutableArray alloc] initWithArray:searchingArray copyItems:YES];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"FirstName IN %@", SearchtableDataSource];
[searchingArray2 filterUsingPredicate:predicate];

所以你的代码应该是这样的:

tempArray = [[NSArray alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"1" ofType:@"plist"]];
searchArray = [tempArray valueForKey:@"FirstName"];
NSString *searchText = searchBar.text;
NSMutableArray *searchResults;

for (NSString *sTemp in searchArray)
{
    NSComparisonResult result = [searchText compare:searchText options:(NSCaseInsensitiveSearch) range:NSMakeRange(0, [searchText length])];
            if (result == NSOrderedSame)
            {
                [searchResults addObject:sTemp];
            }
searchArray2 = [[NSMutableArray alloc] initWithArray:searchArray copyItems:YES];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"FirstName IN %@", searchResults];
[searchArray2 filterUsingPredicate:predicate];
}

然后将 searchArray2 发布到 NSLOG
NSLOG(@"searchArray2: %@", searchArray2)
并告诉我您对结果是否满意:)

于 2011-03-18T05:18:44.160 回答