代码之家  ›  专栏  ›  技术社区  ›  davetron5000

如何最好地为基本的iPhone表/导航数据库应用程序构建代码?

  •  2
  • davetron5000  · 技术社区  · 15 年前

    所以,我有一个 RootViewController 延伸 UITableViewController . 当点击“添加”按钮时,我按下 UIViewController

    书中类似这样的应用程序基本上在 根视图控制器 并使用对模型类的引用来表示“正在编辑的对象”。基本上,模型都被包装在视图控制器中。这似乎是错的。

    所以,我的问题是:模型和管理它们的对象通常在哪里?

    这个问题的答案是否取决于我如何存储我的对象?虽然我的计划是将CoreData用于对象的持久化,但我对CoreData做得并不多。XCode提供的钩子和样板文件是否会使这成为一个问题?

    最佳答案将是指向一些最佳实践类型的东西,我无法通过谷歌或苹果的开发网站轻松找到。

    1 回复  |  直到 15 年前
        1
  •  2
  •   GorillaPatch    15 年前

    首先,你的直觉似乎是错的,你是对的。如前所述,模型存储在视图控制器中。那是个坏主意。这样做违反了模型-视图-控制器范式,这使得代码很难维护。

    所以你现在需要做的是把你的模型放在一个单独的对象或对象树中,或者更好地使用CoreData,这在内存管理方面也很好。

    当您想要使用CoreData时,您应该查看UIFetchedResultsController类,您将使用它从managedObjectContext获取对象,managedObjectContext将是您的模型。

    在“表视图-详细信息编辑”示例中,您将执行以下操作:

    1. 将此rootViewController设置为NSFetchedResultsController的委托
    2. 在rootViewController中实现NSFetchedResultsController的委托方法,并在必要时重新加载表的内容。

    您得到的是模型(CoreData的managedObjectContext)、控制器(rootViewController和detailViewController)和视图的清晰分离。如果现在使用详细视图编辑条目,则会通过NSFetchedResultsController通知rootViewController并自动更新。您还得到的是,在应用程序中的viewControllers之间没有强引用。

    顺便说一句,您在应用程序的委托中设置了CoreData。在Xcode和ADC中有很多样板代码。查看Recipies应用程序[1],其中使用了我刚才描述的方法。苹果开发者网站上也有一些关于CoreData的视频。

    http://developer.apple.com/iphone/library/samplecode/iPhoneCoreDataRecipes/Introduction/Intro.html 核心数据接收