3

私が意図したplist(NSDictionary)は、ユーザーデータ入力によって変更できます。これが私がやったことです。

NSString *path = (the path for the plist)
NSMutableDictionary *plistFile = [[NSDictionary dictionaryWithContentOfFile:path] mutableCopy];
[plistFile setObject:(an NSString object) forKey:(an NSString key)];
[plistFile writeToFile:path atomically:YES];

これが私がコーディングしたものです。それはうまく機能しiPad 3 (new iPad) (iOS 6.1.2)ますXCode (4.6) simulator (iOS 6)。ただし、私のでは動作しませんiPad mini (iOS 6.1.3)。最後のステップにある問題を見つけました。私が書いたとき

BOOL success = [plistFile writeToFile:path atomically:YES];
NSLog(@"%@",@(success));

コンソールは常に 0 を出力します。これは、成功しないことを意味します。しかし、私の iPad 3 とシミュレーターでは、成功を意味する 1 が出力されます。

スローされる例外やその他の出力がないため、説明できるのはそれだけです。ところで、私の iPad 3 (動作する) はジェイルブレイクされていますが、iPad mini はジェイルブレイクされていません。それにもかかわらず、私は自分の開発者アカウントを使用して、両方のデバイスでコード署名しています。誰でも私を助けることができますか?または、誰かが私に新しい解決策を指摘できますか?

4

2 に答える 2

3

使ってみて

NSError * error = nil;
BOOL success = [plistFile writeToFile:path options:NSDataWritingAtomic error:&error];
NSLog(@"Success = %d, error = %@", success, error);

次に、どのようなエラーが発生するかを確認します。多分それはあなたを助けることができます。また、ドキュメント ディレクトリにのみ書き込むことができます。パスに問題がある可能性があります。

于 2013-07-10T11:05:12.283 に答える
2

これを行ったかどうかはコードからわかりませんpathが、サンドボックス化されたアプリ ディレクトリである必要があります。

NSArray* pathList = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
NSString* path = [[NSString alloc] initWithFormat:@"%@", [pathList objectAtIndex:0]];
于 2013-07-10T11:13:13.283 に答える