0

我有一个基于 Core Data 的应用程序,我决定尝试使用 Magical Record。(基本上 MR 似乎做了很多我写的助手类所做的事情)

但是,它基于模型创建了数据库,但是当我尝试使用新插入的对象保存上下文时,它似乎成功了,但在数据库中没有创建任何内容。我已经逐步确保新对象在即将保存的上下文中,我告诉它保存,没有创建错误,但没有数据。我认为我在这里缺少一些明显的东西。

- (void)saveContext:(NSManagedObjectContext*)context withMessage:(NSString*)messageString
{
    NSError *error = nil;
    NSString *message = messageString;
    NSManagedObjectContext *managedObjectContext = nil;
    if (!context) {
        managedObjectContext = [NSManagedObjectContext defaultContext];
    } else {
        managedObjectContext = context;
    }
    if(!message) {
        message = @"Data Saved";
    }
    if ([managedObjectContext hasChanges]) {
        [managedObjectContext save:&error];
        if (error) {
            NSLog(@"Save Error: %@", [error localizedDescription]);
        }
        else {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Save Successful!"
                                                            message:message
                                                           delegate:nil
                                                  cancelButtonTitle:@"OK"
                                                  otherButtonTitles:nil];
            [alert show];
        }
    }
}

有什么见解吗?正如我所提到的,我可以确认堆栈已设置(我在 App Delegate 的 applicationDidFinishLoading 方法中进行了设置,并命名了商店),并且相应的数据库存在于预期的位置,并带有适当的表。我可以确认托管对象上下文的插入对象中存在预期的新插入对象,并且保存没有导致错误。但是,保存后,数据不存在。(显然也不是在 managedObjectContext 中)

提前致谢。

4

2 回答 2

1

我看不到您实际保存实体的位置,或对该代码中的实体进行更改。

同样值得注意的是,您在该代码中做了太多工作。您可能想做更多类似的事情:

- (void) saveMyEntity:(NSObject<NSManagedObject *>) yourEntity;
{
    [MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext){

        yourEntity.message = @"something new";

    } completion:^{
        <UIAlert stuff here>
    }];
}

MagicalRecord 提供了一个易于使用的 API,它隐藏了很多乏味的记忆如何保存数据等。阅读 README 文件可能很好。

于 2012-10-08T23:04:58.550 回答
0

好的,我仍然不知道我的代码出了什么问题,但不使用 NSManagedObjectContext 的保存方法似乎有效。相反,我这样做了:

- (void)saveContextWithMessage:(NSString*)messageString
{
    NSString *message = messageString;
    if (!message) {
        message = @"Data Saved";
    }
    [MagicalRecord saveInBackgroundWithBlock:^(NSManagedObjectContext* localContext){}
                                  completion:^{
                                  UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Save Successful!"
                                                                                  message:message
                                                                                 delegate:nil
                                                                        cancelButtonTitle:@"OK"
                                                                        otherButtonTitles:nil];
                                  [alert show];
    }];
}

如前所述,我正在用 MR 为我做的代码做事,所以我删除了它以使其更清晰。

于 2012-10-09T14:21:40.743 回答