簡體   English   中英

為什么我的模型不會保存到Core Data?

[英]Why won't my model save to Core Data?

我對Objective-C很陌生,我正試圖搞亂Core Data。 我有以下App Delegate接口和實現:

#import <UIKit/UIKit.h>

@interface SDTAppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@property (nonatomic, strong) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, strong) NSManagedObjectModel *managedObjectModel;
@property (nonatomic, strong) NSPersistentStoreCoordinator *persistentStoreCoordinator;

- (void)saveManagedObjectContext;
- (NSManagedObjectContext *)setupManagedObjectContext;
- (NSManagedObjectModel *)setupManagedObjectModel;
- (NSPersistentStoreCoordinator *)setupPersistentStoreCoordinator;
- (NSURL *)applicationDocumentsDirectory;

@end

履行

#import "SDTAppDelegate.h"
#import "ToDoItem.h"

@implementation SDTAppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Get the managed object context and associate it to the app delegate
    self.managedObjectContext = [self setupManagedObjectContext];

    return YES;
}

- (void)applicationWillTerminate:(UIApplication *)application
{
    [self saveManagedObjectContext];
}

/**
 * Save the MOC!
 */
- (void)saveManagedObjectContext
{
    NSError *error = nil;

    if (self.managedObjectContext != nil)
    {
        if ([self.managedObjectContext hasChanges] && ![self.managedObjectContext save:&error])
        {
            /*
             THIS NEEDS TO BE REPLACED
             */
            NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
            abort();
        }
    }
}

#pragma mark - Core Data stack

/**
 Returns the managed object context for the application.
 If the context doesn't already exist, it is created and bound to the persistent store coordinator for the application.
 */
- (NSManagedObjectContext *)setupManagedObjectContext
{
    if (self.managedObjectContext != nil)
    {
        return self.managedObjectContext;
    }

    NSPersistentStoreCoordinator *coordinator = [self setupPersistentStoreCoordinator];

    if (coordinator != nil)
    {
        self.managedObjectContext = [[NSManagedObjectContext alloc] init];
        [self.managedObjectContext setPersistentStoreCoordinator:coordinator];
    }

    return self.managedObjectContext;
}

/**
 * Return the managed object model. If it doesn't exist, create it.
 */
- (NSManagedObjectModel *)setupManagedObjectModel
{
    if (self.managedObjectModel != nil)
    {
        return self.managedObjectModel;
    }

    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Model" withExtension:@"momd"];

    self.managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];

    return self.managedObjectModel;
}

/**
 * Return the persistent store coordinator. If it doesn't exist, create it.
 */
- (NSPersistentStoreCoordinator *)setupPersistentStoreCoordinator
{
    if (self.persistentStoreCoordinator != nil)
    {
        return self.persistentStoreCoordinator;
    }

    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"Model.sqlite"];

    NSError *error = nil;

    self.persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self setupManagedObjectModel]];

    if (![self.persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
                                                       configuration:nil
                                                                 URL:storeURL
                                                             options:nil
                                                               error:&error])
    {
        /*
         THIS NEEDS TO BE REPLACED
         */
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }

    return self.persistentStoreCoordinator;
}

#pragma mark - Application's Documents directory

/**
 * Return the URL to the application's Documents directory.
 */
- (NSURL *)applicationDocumentsDirectory
{
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}

@end

然后在我的控制器中我有以下保存新模型:

// Take the managed object context from the app delegate
SDTAppDelegate *appDelegate = (SDTAppDelegate *)[UIApplication sharedApplication].delegate;
NSManagedObjectContext *context = appDelegate.managedObjectContext;

// Add the new item
ToDoItem *newItem = [NSEntityDescription insertNewObjectForEntityForName:@"ToDoItem" inManagedObjectContext:context];
newItem.item = self.textField.text;
newItem.completed = 0;

無論發生什么,我都無法保存應用程序。 它在界面中顯示正常,但是當我退出並重新啟動時,數據不再存在。 我猜這是我的持久存儲有問題嗎?

您應該保存上下文以便保存在持久性存儲中。

NSError *error;
[context save:&error];

希望能幫助到你。 干杯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM