1

このコードはシミュレーターでは機能しますが、デバイスでは機能しません。これはファイルへの書き込みと関係があると確信しています:

NSString *path = [[NSBundle mainBundle] pathForResource:@"SongData" ofType:@"plist"];
        NSArray *tempData = [[NSArray alloc] initWithContentsOfFile: path];

        NSMutableArray *arr = [[NSMutableArray alloc] init];
        for (NSDictionary *dict in tempData) {
            NSMutableDictionary *new = [[dict mutableCopy] autorelease];
            if ([[new objectForKey:@"Song Title"] isEqualToString:[[tableData objectAtIndex:[indexPath row]] objectForKey:@"Song Title"]]) {
                BOOL fav = [[new objectForKey:@"Favorite"] boolValue];
                [new setObject:[NSNumber numberWithBool:!fav] forKey:@"Favorite"];
            }
            [arr addObject:new];
        }
        [arr writeToFile:path atomically:YES];

私は基本的に NSMutableArray をファイルするために書いています。原子的に何を意味するのかわかりませんが、はいといいえの両方を試しましたが、どちらも機能しません。

ありがとう。

4

1 に答える 1

3

サンドボックスの制限により、アプリ バンドルに書き込むことはできません (コード署名も壊れます)。代わりに、アプリのドキュメント ディレクトリに書き込む必要があります。

Documents ディレクトリは次の方法で取得できます。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *docPath = [paths objectAtIndex:0];
于 2011-05-15T00:20:37.837 に答える