按名称搜索数组中的对象

时间:2012-11-27 12:08:44

标签: iphone objective-c xcode arrays object

是否有可能按名称检查数组中的对象。 在我的应用程序中的某个时刻,我需要访问plist并提取存储在我找到的对象下的信息。 我需要这样做的原因是因为我没有在对象放置在我的数组中的整数。

我已经开始了常规程序,但我没有到达任何地方。也许它对我来说太晚了......

这是我的plist看起来的样子

Array
 Dictionary
      title ...
      text ...
      ect ...
 Dictionary
      title ...
      text ...
      ect ...
  Dictionary
      title ...
      text ...
      ect ...

到目前为止,我的代码根本没有帮助。我肯定做错了什么。

-(NSString*)nameFromPlist:(NSString*)name {

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"Orte.plist"];
_regionArray = [NSArray arrayWithContentsOfFile:writableDBPath];

NSString *string = [[NSString alloc]init];

for(NSDictionary *dict in _regionArray) {
    string = [[dict objectForKey:name] valueForKey:@"title"];

}

return [NSString stringWithFormat:@"%@",string];

}

我的字符串只是返回null。

任何想法? 非常感谢!

解答:

以下是每个人的代码:

- (NSString *)nameFromPlist:(NSString *)name {

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *tmpFileName = [[NSString alloc] initWithFormat:@"Orte.plist"];
NSString *path = [documentsDirectory stringByAppendingPathComponent:tmpFileName];

NSString *string;
NSMutableArray *array = [NSMutableArray arrayWithContentsOfFile:path];

NSDictionary *dict = [[NSDictionary alloc] init];
NSString *title;
for (int i=0; i<[array count]; i++) {
    dict = [array objectAtIndex:i];
    title = [dict valueForKey:@"title"];

    if([title isEqualToString:name]) {
        string = [dict valueForKey:@"title"];
        NSLog(@"Titel: %@", string);
    }        
}

return [NSString stringWithFormat:@"%@",string];

}

非常感谢大家!

2 个答案:

答案 0 :(得分:0)

首先你不需要分配NSString,因为你会从valueForKey获得一个不同的。

然后,如果我理解你想要获得更好的代码,可能会使用NSPredicate或基于块的indexOfObjectPassingTest。两者都遍历数组并对元素执行测试以获得匹配元素(或它们的索引)。

答案 1 :(得分:0)

NSString* plistPath = [[NSBundle bundleForClass:[self class]] pathForResource:@"<PlistFileName>" ofType:@"plist"];
NSArray *array = [[NSArray alloc] initWithContentsOfFile:plistPath];
NSMutableArray* titles = [[NSMutableArray alloc] init];
for (NSDictionary* d in array)
    [titles addObject:[d objectForKey:@"title"]];
NSLog(@"Object found at index %i", [a indexOfObject:@"<Your object name>"]);

确保您正在测试NSNotFound是否找不到,而不是(比如说)0。