我正在工作的某件东西有问题。到目前为止,我的应用程序由两个UITableView控制器和一个ViewController组成。该应用程序仅要求用户在UIAlert上输入列表的名称,并将其保存到核心数据中,然后将该列表的名称放入第一个表格视图中。然后,用户单击列表的名称,然后将其推送到列表的内容,该内容为空,因为尚未填充。然后,用户填充TableView,因此将其推送到单个视图控制器,您将在其中输入所有信息并单击save,并将其另存为一项。所以我的问题是,当我添加要保存的项目时,但是当我重新启动应用程序时,列表仍然存在,但列表中的所有项目都消失了。如果您有任何建议让我知道,我不知道为什么要这么做!谢谢!

我将项目放在GitHub上是因为有很多代码,它也使您可以体验我的问题,并了解控制器的流程。 https://github.com/jackintosh7/test-master

我的添加项目.m:

- (IBAction)save:(id)sender {
    NSManagedObjectContext *context = [self managedObjectContext];

    // Create a new managed object
    NSManagedObject *newItem = [NSEntityDescription insertNewObjectForEntityForName:@"Item" inManagedObjectContext:context];



    [newItem setValue:self.name.text forKey:@"itemName"];
    [newItem setValue:self.price.text forKey:@"price"];
    [newItem setValue:self.desc.text forKey:@"description"];

    NSError *error = nil;
    // Save the object to persistent store
    if (![context save:&error]) {
        NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
    }

    [self dismissViewControllerAnimated:YES completion:nil];
}
@end

最佳答案

对于将来非常有帮助:作为健全性检查,我首先要检查您列表中的项目是否真正被保存。您可以使用模拟器和CoreDataPro之类的工具来查看您的商店。当我第一次学习iOS编程和Core Data时,这非常有帮助:
https://github.com/yepher/CoreDataUtility

使用上述实用程序,我发现您的物品实际上没有保存到您的持久性存储中。

我看了看您的修改后的代码,并进行了一些小的编辑,所有这些似乎都在工作。

1)在AddViewController.h中:导入item.h和list.h。最重要的是,将List强属性添加到您的AddViewController中,以便您的新Item引用了适用的列表。

#import "Item.h" //Your forward @class definitions would probably work.
#import "List.h"

@property (nonatomic, strong) List *list;


2)减少WishListView.m中的代码prepareForSegue:只需将List和ManagedObjectContext传递到目标ViewController。

else if( [[segue identifier] isEqualToString:@"AddItem"] ) {
    destViewController.list = self.list;
    destViewController.managedObjectContext = self.managedObjectContext;
    destViewController.completionBlock = ^(BOOL saved){
            _items = nil;
            [[self tableView] reloadData];
    };
}


3)在AddViewController.m中创建NSEntityDescription而不是传递它。还要从我们创建的新list属性中保存列表。

- (IBAction)save:(id)sender {
NSManagedObjectContext *context = [self managedObjectContext];
self.item = [NSEntityDescription insertNewObjectForEntityForName:@"Item"
                                          inManagedObjectContext:context];
self.item.name = self.name.text;
self.item.price = self.price.text;
self.item.desc = self.desc.text;
self.item.list = self.list;

NSError *error = nil;
// Save the object to persistent store
if (![context save:&error]) {
    NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
}

if( self.completionBlock ) {
    self.completionBlock(YES);
}
[self dismissViewControllerAnimated:YES completion:nil];


}

关于ios - 启动之间未保存核心数据实体,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22924250/

10-12 01:47
查看更多