1

次のように AppDelegate で didFinishLaunchingWithOptions を実行したときに、plist をドキュメント ディレクトリにコピーしています。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[self performSelector:@selector(copyPlist)];
return YES;
}

- (void)copyPlist {
    NSFileManager *fileManger=[NSFileManager defaultManager];
    NSError *error;
    NSArray *pathsArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);

    NSString *doumentDirectoryPath=[pathsArray objectAtIndex:0];

    NSString *destinationPath= [doumentDirectoryPath stringByAppendingPathComponent:@"Obj.plist"];

    if ([fileManger fileExistsAtPath:destinationPath]){
        NSLog(@"database localtion %@",destinationPath);
        return;
    }
    NSString *sourcePath=[[[NSBundle mainBundle] resourcePath]stringByAppendingPathComponent:@"Obj.plist"];

    [fileManger copyItemAtPath:sourcePath toPath:destinationPath error:&error];
}

次に、次のようにビューに plist のコンテンツを表示しようとしています。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"Obj.plist"];
NSLog(@"plist path %@", path);

sortedObj = [[NSMutableArray alloc]initWithContentsOfFile:path];
NSLog(@"objects %@", sortedObj);

ログ結果:

データベースの場所:

/Users/kdb/Library/Application Support/iPhone Simulator/5.1/Applications/4E165740-01CD-4ED3-8971-FDCCB1751DD1/Documents/Obj.plist

plist パス:

データベースの場所と同じ

オブジェクト:

(ヌル)

内容は空です。それを機能させる方法は?

plist は、辞書を含む配列です。

4

1 に答える 1

0

バンドル内のリソースのパスを NSLog しようとしましたか? 正しく見えますか?それとは別に、この他の方法を使用して見つける必要があると思います:

- (NSString *)pathForResource:(NSString *)name ofType:(NSString *)extension

したがって、メソッド呼び出しは次のようになります。

NSString *sourcePAth = [[NSBundle mainBundle] pathForResource:@"Obj" ofType:@"plist"];

では、あなたにはできないと思います[[NSMutableArray alloc] initWithContentsOfFile:path];。むしろ、NSDictionary を使用してみてください。

NSDictionary *loadedPlist = [[NSDictionary alloc] initWithContentsOfFile:pathString];
//and then, if you need to edit it:
NSMutableDictionary *workingCopy = [loadedPlist mutableCopy];

質問の編集を読んでください。plist は配列と見なすことはできません。それらは常に辞書であるため、NSDictionary を使用して逆シリアル化する必要があります。

ログなしで初めて機能する理由がわかりません。それらを投稿していただけますか?また、NSMutableArray を使用して動作しているように見えても、逆シリアル化の NSDisctionary スタイルに従っていると、問題をデバッグしやすくなります。

于 2012-08-11T18:40:40.777 に答える