【问题标题】:writing a plist in objective c在目标 c 中编写一个 plist
【发布时间】:2012-04-10 01:50:12
【问题描述】:

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

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

我想存储前 20 个高分(字符串和整数对)并将其存储在 plist 中。

我开始:

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

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

【问题讨论】:

  • 三个cmets: 1.你的plist的根元素真的是一个数组吗?我怀疑。您宁愿为您的目的初始化一个 NSMutableDictionary。 2. 然后你不能在索引 0 处插入一个对象,因为字典是一个 unordered 集合。 3. 在你问另一个问题之前:你不能将 plist 重写到应用程序的主包目录,因为应用程序不可能写入自己的包。
  • 即使您将 NSMutableDictionary 对象存储在数组中并保存,当您加载它时,它们也是不可变的。 (NSArray Class Reference for initWithContentsOfFile 说“这个数组包含的对象是不可变的,即使数组是可变的。”)

标签: objective-c xcode plist


【解决方案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;
}];

如果您希望分数相反,请将“>”更改为“

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

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

【讨论】:

  • 这确实很有帮助!但是,问题是我想为每个分数存储一个分数和一个字符串。你是说key应该是string,然后key的value应该是score?
【解决方案2】:

Property List Serialization

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

使用writeToFile:...writeToURL:... 方法在plist 中存储

【讨论】:

  • 另外,将 plist 的根作为数组通常是非常糟糕的做法,除非它在顺序方面是不确定的。
【解决方案3】:
[arr insertObject:[NSMutableDictionary dictionary] atIndex:0];

【讨论】:

  • 首先,感谢您的评论。第二,澄清一些事情。我的目标是存储在一个 plist 中,不知何故,我不确定(我在想我上面描述的方式)前 10 个最高分(它们的详细信息由一对 int 和 NSString* 组成。每次我想要检查我正在插入的 int 是否高于那里已经存在的 10 个 int,如果是,则插入并删除最小的 int(如果它们总体上超过 10 个)。这样更清楚吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-22
  • 2011-03-23
  • 1970-01-01
相关资源
最近更新 更多