0

我知道有很多主题有类似的问题,但我一直无法找到一个主题来解决我的问题。

我想存储一个高分列表。
每个高分条目必须有两个元素
,一个 NSString* 和一个 int。

我想存储前 20 个高分(字符串和整数对)并在 plist 中执行此操作。

我开始:

NSMutableArray *arr = [[NSMutableArray alloc] initWithContentsOfFile: [[NSBundle mainBundle] pathForResource:@"Mylist" ofType:@"plist"]];

我希望数组的第 0 项是一个字典,我可以在其中插入 (string, int) 的键值对
我该怎么做?

4

3 回答 3

1

属性列表序列化

您需要注意:可变性选项,因为您的方法可能返回不可变数组...

存储在 plist 中是使用writeToFile:...orwriteToURL:...方法完成的

于 2012-04-09T01:51:49.463 回答
1

您始终可以调用[arr addObject:score];,对其进行排序,然后删除最后一项,直到有 10 个。

排序:

[arr sortUsingComparator:^(id firstObject, id secondObject) {
    NSDictionary *firstDict = (NSDictionary *)firstObject;
    NSDictionary *secondDict = (NSDictionary *)secondObject;
    int firstScore = [[firstDict objectForKey:@"score"] intValue];
    int secondScore = [[secondDict objectForKey:@"score"] intValue];
    return firstScore < secondScore ? NSOrderedAscending : firstScore > secondScore : NSOrderedDescending : NSOrderedSame;
}];

如果您希望分数相反,请将“>”更改为“<”,反之亦然。要将列表减少到 10:

while ([arr count] > 10) {
    [arr removeLastObject];
}

从 plist 加载时,您可能需要进行排序。对于 10 分,对性能的影响很小,所以我建议你这样做以防万一。

于 2012-04-09T13:23:28.337 回答
0
[arr insertObject:[NSMutableDictionary dictionary] atIndex:0];
于 2012-04-08T20:28:48.063 回答