关于iphone的plists和objective c的另外几个问题。 这两个问题都与我的plist有关,可以在我上一篇last question中看到。
首先要做的是搜索,我知道这是可能的,但是正确的方法是什么?我应该将所有可搜索的对象拉入数组并使用它来构建表吗?或者是否可以通过plist迭代并只是显示匹配?或者我有其他方式在这里失踪?作为下面的一个简单示例,我想回到两个'琼斯'结果:
<dict>
<key>A</key>
<array>
<string>A Jones</string>
<string>A King</string>
</array>
<key>T</key>
<array>
<string>T Jones</string>
<string>T King</string>
</array>
其次,是否有可能从plist中调出一个随机结果,我很确定它是,但是再次提出这个问题的正确方法是什么?
我会承认找到一个有点痛苦的因素,因为在我看来,这似乎是一种垃圾形式的xml。而且我仍然发现通过plist字典迭代在某种程度上相当混乱。不过,对这两个问题的任何想法都会受到高度赞赏。
谢谢:)
答案 0 :(得分:2)
显然可以使用NSDictionary
迭代-(NSEnumarator *)objectEnumerator;
值,您还可以使用-(NSArray *)allValues;
检索所有值,还可以查看-(NSSet *)keysOfEntriesPassingTest:(BOOL (^)(id key, id obj, BOOL *stop))predicate;
返回包含值的键的NSSet
已通过测试(来自Mac OS X 10.6)。
关于第二个问题,我认为没有“更好”的方式。我将如何做到这一点:
NSDictionary
-(NSArray *)allKeys;
的所有密钥
-(id)objectAtIndex:(NSUInteger)anIndex;
-(id)objectForKey:(id)aKey;
然后你得到了你的对象。 希望这会有所帮助。
修改强>
这是一种迭代NSDictionary
中的值的简单方法:
// assuming you already have a well initialized dictionary
// first create a container
NSMutableArray *selectedObjects = [[NSMutableArray alloc] init];
// then retrieve an enumerator for the dictionary
NSEnumerator *e = [theDictionary objectEnumerator];
id anObject;
// iterate...
while((anObject = [e nextObject]) != nil) {
// do what you want with the object
// in your case each object is an array
NSArray *theArray = (NSArray *)anObject;
// ...
// if you find any of them interesting put it in the first array
if([[theArray objectAtIndex:0] isEqualToString:@"Jones"]) {
[selectedObjects addObject:[theArray objectAtIndex:0]];
}
}
// here are the selected objects in selectedObjects.
// you won't forget to release selectedObjects when you don't need it anymore