【问题标题】:Xcode: Storyboarding with CoreDataXcode:使用 CoreData 进行故事板
【发布时间】:2012-06-07 15:56:30
【问题描述】:

Download my source for reference!

我是 iOS 开发新手,我正在尝试自学...我需要一些帮助

首先,切换到“安全文化主视图”时出现错误...

2012-06-07 11:50:54.720 SafetyCulture[1777:fb03] *** 终止应用程序 由于未捕获的异常“NSInternalInconsistencyException”,原因: '+entityForName: 找不到实体的 NSManagedObjectModel 名称'事件''

我不知道如何解决这个问题...

其次,我想通过两步过程创建记录...在“问题...”VC 上,我希望用户回答大约 20 个问题——但它们都将被格式化为同样的方式,所以我不需要额外的xib,对吗?所以当谈到最后一个问题时,我希望“下一步”按钮说“完成”或“保存”......应该很简单吗?

我渴望在 Xcode 中站稳脚跟...如果您需要更多信息,请告诉我,我会尽力而为!

【问题讨论】:

  • 你能用CloudApp或Dropbox分享它吗?我宁愿不注册另一个网站,我想更多的人会倾向于轻松下载它。
  • 你的愿望就是我的命令。 dropbox.com/s/97fzpnxu3ej0giv/SafetyCulture.zip
  • 谢谢你!现在看...我喜欢 UIStoryboard。
  • 发现了你的问题,和storyboard无关。现在写下答案……我的朋友,您需要使用 Xcode 进行调试的入门知识。开始聊天吧!
  • 对不起,托马斯。假期中!我回来后会回复的。绝对有兴趣——谢谢你的提议!

标签: iphone ios core-data storyboard nsmanagedobject


【解决方案1】:

我找到了引发异常的代码:

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Event" inManagedObjectContext:self.managedObjectContext];

在您的方法- (NSFetchedResultsController *)fetchedResultsController 中,同名属性的自定义设置器,如果不存在则初始化一个。真正的问题是self.managedObjectContext 目前为零。在您的代码中,主视图控制器没有分配 managedObjectContext。

最简单的方法是从 AppDelegate 中以这种方式获取它

#import "safetyCultureAppDelegate.h" //this needs to be at the top to make sure the compiler knows what you’re on about.
...
self.managedObjectContext = [(safetyCultureAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; //put this in the viewDidLoad, or wherever you can set it when the Master VC is created.

使用断点很容易解决这个问题,我强烈建议您学习如何使用它,因为它们对于此类可重现的错误非常有用。

至于你的第二个问题,给这只猫剥皮的方法有上百万种。创建一堆场景并在它们之间进行推送并给它们一个共享的“问题类”并没有错。它看起来很漂亮,并且不会涉及太多代码。性能不会成为问题。

也就是说,如果您想以编程方式执行此操作,请使用 NSDictionaries 的 NSArray,每个 dict 包含一个问题和可能的答案,并对控制器进行编程,以便在向后或向前点击时从数组中加载它们,记住保存。如果问题是静态的,我真的强烈建议您使用故事板方法。不那么繁琐。

Breakpoints 和 segues 都很好,但现在我敦促你冲杯咖啡,买些饼干,然后阅读 Core Data Programming Guide 的封面。您会发现 Apple 的文档非常易于访问。

如果您真的不熟悉,请关注 this advice. 它对我有用。

【讨论】:

    【解决方案2】:

    如果您在现有项目中添加核心数据,请按照此链接中的说明进行操作Adding Core Data Existing iPhone Projects

    对于第二个问题:你不需要添加更多视图,只需使用 UIScrollView 并根据需要将其展开即可。

    【讨论】:

      【解决方案3】:

      我认为这不是故事板问题。您的视图控制器需要设置核心数据堆栈。检查调用entityForName: 的代码是否设置了有效的NSManagedObjectContext

      Core Data 堆栈是 Core Data 需要运行的一些对象。在使用 Core Data 创建的标准 Xcode 模板中,这些对象在 Application Delegate 中设置。

      如果您愿意,Core Data 的“基本单元”是 NSManagedObject。您在建模工具中对实体进行建模,然后使用 Xcode 从模型中生成类。这些生成的类是 NSManagedObjectObject 的子类。

      您通常与 NSManagedObjectContext 进行交互。 NSManagedObjectContext 就像一个“便签本”,您可以在其中对 NSManagedObjects 进行更改。上下文是应用程序委托设置的核心数据堆栈的顶部。

      当您在 Xcode 中创建新项目时,系统会提示您输入一些信息,包括是否使用 Core Data。如果您选中该框,Xcode 将设置您的持久存储协调器和您的托管对象上下文。这就是你的核心数据堆栈的基础。

      通常,您可以传递对应用委托的托管对象上下文的引用。 (你不能从多个线程访问同一个上下文。核心数据和多线程是一个单独的章节。)然后,每当你实例化一个新对象时,你就将它直接插入到托管对象上下文中。

      要保存,请在上下文中调用 save。

      【讨论】:

      • Moshe,你能再帮我点忙吗?就像我说的,我是新手...我什至不确定核心数据堆栈是什么或如何使用 NSManagedObjects...或上下文...
      • 添加了一半的答案,以后有空的时候再添加。
      猜你喜欢
      • 2017-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-16
      • 2012-01-22
      • 2012-01-13
      • 1970-01-01
      相关资源
      最近更新 更多