0

ARRAY.plist にある文字列を持ってくる必要があります。簡単にするためにシングルトンを作成しています。これが私のplistの例です。

<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;
}

問題は、私がクラッシュしているということです。シングルトーンを呼び出すときにテキスト配列を返すために、最終的な配列を作成する方法がわかりません。私が間違っているのは何ですか?

編集: クラッシュ ログ -[__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;
}
4

1 に答える 1

2

データが辞書の配列の配列であるかのように objectAtIndex を 2 回取得しようとしているように見えますが、実際には単なる辞書の配列です。

変更してみてください:

  NSArray* storyArray = [self.tutorial objectAtIndex:envId];
  NSDictionary* gamingVoicesArray = [storyArray objectAtIndex:

に:

  NSDictionary* gamingVoicesArray = [self.tutorial objectAtIndex:pageNumber];
于 2013-08-08T16:02:01.600 に答える