我有这个代码
@implementation LevelManager {
NSArray * levelPacks;
}
- (id)init {
if ((self = [super init])) {
NSString *file = [[NSBundle mainBundle] pathForResource:@"Levels" ofType:@"plist"];
levelPacks = [NSArray arrayWithContentsOfFile:file];
}
}
它读取以下名为 Levels.plist
的 plist 文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
<dict>
<key>PackName</key>
<string>First Pack</string>
<key>Levels</key>
<array>
<dict>
<key>Name</key>
<string>1</string>
<key>Time</key>
<integer>60</integer>
<key>ScoreBronze</key>
<integer>20</integer>
<key>ScoreSilver</key>
<integer>25</integer>
<key>ScoreGold</key>
<integer>30</integer>
<key>Fish</key>
<dict>
<key>OrangeFish</key>
<dict>
<key>Rarity</key>
<integer>1</integer>
<key>MinTime</key>
<integer>0</integer>
</dict>
</dict>
</dict>
<dict>
<key>Name</key>
<string>2</string>
<key>Time</key>
<integer>60</integer>
<key>ScoreBronze</key>
<integer>25</integer>
<key>ScoreSilver</key>
<integer>30</integer>
<key>ScoreGold</key>
<integer>35</integer>
<key>Fish</key>
<dict>
<key>OrangeFish</key>
<dict>
<key>Rarity</key>
<integer>4</integer>
<key>MinTime</key>
<integer>0</integer>
</dict>
<key>PurpleFish</key>
<dict>
<key>Rarity</key>
<integer>2</integer>
<key>MinTime</key>
<integer>10</integer>
</dict>
</dict>
</dict>
</array>
</dict>
<dict>
<key>PackName</key>
<string>Second Pack</string>
<key>Levels</key>
<array>
<dict>
<key>Name</key>
<string>1</string>
<key>Time</key>
<integer>60</integer>
<key>ScoreBronze</key>
<integer>20</integer>
<key>ScoreSilver</key>
<integer>25</integer>
<key>ScoreGold</key>
<integer>30</integer>
<key>Fish</key>
<dict>
<key>OrangeFish</key>
<dict>
<key>Rarity</key>
<integer>5</integer>
<key>MinTime</key>
<integer>0</integer>
</dict>
<key>PurpleFish</key>
<dict>
<key>Rarity</key>
<integer>3</integer>
<key>MinTime</key>
<integer>0</integer>
</dict>
<key>YellowFish</key>
<dict>
<key>Rarity</key>
<integer>1</integer>
<key>MinTime</key>
<integer>0</integer>
</dict>
</dict>
</dict>
</array>
</dict>
</array>
</plist>
这一直有效,直到将我的代码更新到 iOS 7,现在我得到一个包含两个项目的数组,这两个项目的类型都是 invalid
。
在 xcode 中检查变量时显示错误
(<invalid>) [0] = <error: expected ']'
error: 1 errors parsing expression
>
有人知道这是为什么吗?
最佳答案
我如图所示复制了 plist,将其放入使用 Xcode 5 的新项目的文件中,然后在 iOS7 模拟器中运行。它工作正常 - 我可以在一个数组中看到这两个词典。
建议:
文件因不可打印字符而损坏,但当您将其粘贴到 SO 中时,它们消失了
文件类型为 UTF-16 或 UTF-8 以外的类型。在 Xcode 中查看右侧的 Inspector Pane (或我们查询的终端)。
您可以通过删除原始文件,然后创建一个新文件并像我一样将您帖子中的文本粘贴到其中来解决它。请注意,Xcode 会大量提示空 plist 文件,因此您可能希望在终端等中执行此操作,然后将文件添加到 Xcode。
关于带有 plist 返回的 iOS 7 arrayWithContentsOfFile 导致类型无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19338640/