インターネットとstackOverflowでいくつかの投稿を確認しましたが、今のところ答えが見つかりませんでした。これは私のAppDelegateです。私の知る限り、これらの実装はかなり標準的です。次の行を追加して引数を渡しましたが、役に立ちませんでした。
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
私は自分のプロジェクトを掃除しましたが、それも役に立ちませんでした。また、ApplicationSupportフォルダーは作成されません。これが問題の原因である可能性はありますか? 「コアデータを使用する」オプションを使用してアプリを作成しませんでしたが、必要なメソッドを提供しました...
-(NSPersistentStoreCoordinator *)persistentStoreCoordinator {...}が一番下にあります!
ヘルプは大歓迎です!
#import "WebLogClientAppDelegate.h"
// create anonymous catergories for uses in this class
@interface WebLogClientAppDelegate();
@property(nonatomic, readonly) NSString *applicationSupportFolder;
@property(nonatomic, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator;
@end
@implementation WebLogClientAppDelegate
@synthesize autorPrefFeld, benutzerPrefFeld, passwortPrefFeld, hauptfenster,
managedObjectModel, managedObjectContext, autor;
- (void) applicationWillFinishLaunching:(NSNotification *)notification
{
NSLog(@"applicationWillFinishLaunching");
NSDictionary *defaultsDict = [NSDictionary dictionaryWithObjectsAndKeys:@"Mathias Mustermann", @"autor",
@"mathias", @"benutzer",
@"passwort",@"passwort", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultsDict];
}
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender
{
[moc commitEditing];
if ([moc hasChanges]) {
NSLog(@"Save needed!");
[moc save:nil];
}
return NSTerminateNow;
}
- (NSString *)autor{
return [[NSUserDefaults standardUserDefaults] stringForKey:@"autor"];
}
- (void)windowDidBecomeKey:(NSNotification *)notification
{
NSLog(@"windowDidBecomeKey");
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[autorPrefFeld setStringValue:[defaults stringForKey:@"autor"]];
[benutzerPrefFeld setStringValue:[defaults stringForKey:@"benutzer"]];
[passwortPrefFeld setStringValue:[defaults stringForKey:@"passwort"]];
}
- (void)windowDidResignKey:(NSNotification *)notification
{
NSLog(@"windowDidResignKey");
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[autorPrefFeld stringValue] forKey:@"autor"];
[defaults setObject:[benutzerPrefFeld stringValue] forKey:@"benutzer"];
[defaults setObject:[passwortPrefFeld stringValue] forKey:@"passwort"];
[defaults synchronize];
}
- (NSManagedObjectModel *)managedObjectModel
{
if(objectModel){
return objectModel;
}
objectModel= [NSManagedObjectModel mergedModelFromBundles:nil];
return objectModel;
}
- (NSString *)applicationSupportFolder
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES);
NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : NSTemporaryDirectory();
return [basePath stringByAppendingPathComponent:@"WeblogClient"];
}
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (storeCoord) {
return storeCoord;
}
NSFileManager *fileManager;
NSString *applicationSupportFolder;
NSURL *url;
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
fileManager = [NSFileManager defaultManager];
applicationSupportFolder = self.applicationSupportFolder;
if (![fileManager fileExistsAtPath:applicationSupportFolder]) {
[fileManager createDirectoryAtPath:applicationSupportFolder withIntermediateDirectories:NO attributes:nil error:nil];
}
url = [NSURL fileURLWithPath:[applicationSupportFolder stringByAppendingPathComponent:@"WeblogClient.xml"]];
storeCoord = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:self.managedObjectModel];
[storeCoord addPersistentStoreWithType:NSXMLStoreType configuration:nil URL:url options:options error:nil];
return storeCoord;
}
- (NSManagedObjectContext *)managedObjectContext
{
if (moc) {
return moc;
}
NSPersistentStoreCoordinator *coordinator = self.persistentStoreCoordinator;
if (coordinator) {
moc = [NSManagedObjectContext new];
[moc setPersistentStoreCoordinator:coordinator];
}
return moc;
}
@end
エラーを修正したかどうかはわかりませんが、次の点を確認してください。 XCodeデータモデルを変更した後も「保存操作の失敗」が発生し続けます
また、私にとっては、私が取り組んでいてすでに実行していた別のプロジェクトと同じstorecordinatorsqlite名を持っていました...