我正在制作一款显示红葡萄酒信息的iPhone应用程序。这些葡萄酒储存在含有一系列字典的plist中。我正在向应用程序添加一个搜索视图控制器,并且为了轻松启动我想要获得“名称”键的值包含 nameString(来自文本框)的葡萄酒。
有点停在这里,我需要一些关于最合适的方法的建议。 NSArray类中是否有一个函数可以执行此任务,应该引入NSPredicate,NSUserDefaults,还是有其他选项?我做了一些研究,但我需要一些建议,也许还有一个例子可以开始。
我将推进搜索功能,让用户包含/排除国家/地区,获得适合此类和食物的葡萄酒,设置最低价格,最高价格等。字典包含所有这些信息的字符串。所以在我开始这样的高级课程之前,我需要一些建议,哪些功能可以最好地完成我的工作。
-(IBAction)searchButtonPoke:(id)sender{
NSString *path = [[NSBundle mainBundle] pathForResource:@"Wines" ofType:@"plist"];
allObjectsArray = [[NSMutableArray alloc] initWithContentsOfFile:path];
NSString *nameString = [NSString stringWithFormat:@"%@", [nameTextField text]];
resultObjectsArray = /*objects where the value for the key "Name" contains
nameString*/;
答案 0 :(得分:10)
如何简单地遍历数组并比较名称?
resultObjectsArray = [NSMutableArray array];
for(NSDictionary *wine in allObjectsArray)
{
NSString *wineName = [wine objectForKey:@"Name"];
NSRange range = [wineName rangeOfString:nameString options:NSCaseInsensitiveSearch];
if(range.location != NSNotFound)
[resultObjectsArray addObject:wine];
}
Swift版本更简单:
let resultObjectsArray = allObjectsArray.filter{
($0["Name"] as! String).range(of: nameString,
options: .caseInsensitive,
range: nil,
locale: nil) != nil
}
干杯, ANKA
答案 1 :(得分:7)
这个作品!!!测试!!!
for (NSDictionary* dict in Array) {
if ([[dict objectForKey:@"key"] isEqualToString:string]) {
Index = [Array indexOfObject:dict];
}
}
答案 2 :(得分:2)
我们也可以使用NSPredicate,如下:
NSPredicate *predicate =
[NSPredicate predicateWithFormat:@"publisher == %@", @"Apress" ];
NSArray *filtered = [bookshelf filteredArrayUsingPredicate:predicate];
如果可以在书架数组中找到发布者,则过滤的计数将大于0。
我认为这种搜索方式更加清晰。希望它有所帮助。
答案 3 :(得分:0)