我需要带一个位于.plist上的ARRAY
个字符串。我正在制作一个单身人士,以使其更容易。
这是我的一个例子。
<plist version="1.0">
<array>
<dict>
<key>id</key>
<integer>1</integer>
<key>Texts</key>
<array>
<string>Text number one</string>
<string>Text number two</string>
<string>Text number three</string>
</array>
</dict>
<dict>
<key>id</key>
<integer>2</integer>
<key>Texts</key>
<array>
<string>Text number one</string>
<string>Text number two</string>
<string>Text number three</string>
</array>
</dict>
</array>
</plist>
这是我带来字符串数组的方法:
- (NSArray*)getStoryTutorialForEnvironmentId:(int)envId andPage:(int)pageNumber{
NSArray* storyArray = [self.tutorial objectAtIndex:envId];
NSDictionary* gamingVoicesArray = [storyArray objectAtIndex:pageNumber];
NSArray *finalArray = [gamingVoicesArray objectForKey:@"Texts"];
return finalArray;
}
事情是,我正在崩溃。我不知道如何制作我的最终数组,以便在调用单音时返回文本数组。我错了什么?
修改 CRASH LOG - [__ NSCFDictionary objectAtIndex:]:无法识别的选择器发送到实例0xaa49e70
编辑2:
- (id)init{
self = [super init];
if (self != nil) {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"StoryText"] != nil) {
NSArray* environment_story_temp = [defaults objectForKey:@"MyPlist"];
self.tutorial = [[NSMutableArray alloc] initWithArray:environment_story_temp];
}else{
NSString* plistPath = [[[NSBundle mainBundle] resourcePath]
stringByAppendingPathComponent:@"MyPlist.plist"];
if (plistPath != nil) {
self.tutorial = [[NSMutableArray alloc] initWithContentsOfFile:plistPath];
[defaults setObject:self.tutorial forKey:@"MyPlist"];
[defaults synchronize];
}
}
}
return self;
}
答案 0 :(得分:2)
看起来你试图获取objectAtIndex两次,就好像你的数据是一个字典数组数组,而它实际上只是一个字典数组。
尝试更改:
NSArray* storyArray = [self.tutorial objectAtIndex:envId];
NSDictionary* gamingVoicesArray = [storyArray objectAtIndex:
为:
NSDictionary* gamingVoicesArray = [self.tutorial objectAtIndex:pageNumber];