Iphone 按名称搜索数组中的对象

Iphone 按名称搜索数组中的对象,iphone,objective-c,xcode,arrays,object,Iphone,Objective C,Xcode,Arrays,Object,是否可以按名称检查数组中的对象。 在我的应用程序中的某个时刻,我需要访问plist并提取存储在我按其名称找到的对象下的信息。 我之所以需要这样做,是因为我没有整数,对象在数组中放置的位置就是整数 我已经开始了通常的程序,但我没有进展。也许对我来说太晚了 这就是我的plist的样子 Array Dictionary title ... text ... ect ... Dictionary title ... text ...

是否可以按名称检查数组中的对象。 在我的应用程序中的某个时刻,我需要访问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*名称FROMPLIST:NSString*名称{

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];
}


非常感谢大家

首先,您不需要分配NSString,因为您将从valueForKey获得一个不同的NSString

如果我理解正确,那么您想要得到更好的代码的可能是使用NSPredicate或基于块的indexOfObjectPassingTest。这两种方法都遍历数组并对元素执行测试,以获得匹配的元素或它们的索引

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。

您应该为代码语言添加一个标记,这样您的问题就更有可能得到回答。出现意外结果的可能性有几种:您的区域数组可能为零;此外,在每次迭代中,您都会丢弃string的前一个值,并用一个新值替换它,该值可能是nil。使用调试器在执行过程中找出变量的实际值。谢谢大家。我终于明白了。我把代码放在原来的问题里了!伟大的不过,我建议您看看更高效的NSPredicates或基于块的API: