私はチームで開発しており、すべてまったく同じイメージのMacを使用しています。コードを記述したマシンを使用して、プログラムで作成し、pListファイルに書き込むことができます。しかし、ホームマシン(同じイメージ)を使用する場合、またはチームメートがマシンでコードをテストする場合、[NSFileManager copyItemAtPath:toPath:error:]:ソースパスはnil'エラーでクラッシュします。デバッグでは、ファイルパスは有効です。ただし、バンドルは次のとおりです。
NSString *bundle = [[NSBundle mainBundle]pathForResource:@"Family" ofType:@"plist"];
[pListfileMgr copyItemAtPath:bundle toPath: pListpath error:&error];
ゼロです。コードのバージョン管理にgitを使用しています。何かを見逃していない限り、.DS_Storeファイルと/userdata/ファイルをリポジトリから除外してきました。何が起こっている?これがコードで、ここからほぼ逐語的に再現されています。
NSError *error;
NSArray *pListpaths =NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *pListdocumentsDirectory = [pListpaths objectAtIndex:0];
NSString *pListpath = [pListdocumentsDirectory stringByAppendingPathComponent:@"Family.plist"];
NSFileManager *pListfileMgr = [NSFileManager defaultManager];
//Create a plist if it doesn't alread exist
if (![pListfileMgr fileExistsAtPath: pListpath])
{
NSString *bundle = [[NSBundle mainBundle]pathForResource:@"Family" ofType:@"plist"];
[pListfileMgr copyItemAtPath:bundle toPath: pListpath error:&error];
}
NSMutableDictionary *thePList = [[NSMutableDictionary alloc] initWithContentsOfFile: pListpath];
[thePList setObject:[NSString stringWithFormat:@"%@", numberOfPeopleInFamilyOfOrigin] forKey:@"famSize"];
[thePList writeToFile: pListpath atomically: YES];