据我所知(Three20 文档很少),Three20 无法自动使用 Core Data。
我通常做的是:
- 从 Core Data 获取实体集
- 将相关数据(来自实体)加载到 TTTableViewController 中的 TTTableViewDataSource(例如 TTSectionedDataSource)
- 瞧!
通过实现 TTTableViewDataSource 子类并让它收集/管理实体,可能有一种更动态的方法来做到这一点,但我认为这不值得。
(在将实体加载到 Three20 中的数据源之前,您需要将它们转换为表项,因为数据源并不完全是 Three20 中的数据源)。
例如
[TTSectionedDataSource dataSourceWithObjects:
@"", // section header
[TTTableTextItem itemWithText:@"An item" URL:@"http://www.facebook.com"],
[TTTableSummaryItem itemWithText:@"Another item"],
nil];
更新:我不认为您可以通过 Three20 URL 方案将实体直接传递到详细视图(尽管存在通用对象机制)。您可以通过查询参数将对象作为 NSDictionary 的一部分传递。
例如你可以有一个映射,如
[map from:@"example://bookDetails/(initWithName:)" toViewController:[BookDetailsController class]];
还有这样的方法定义
- (id) initWithName:(NSString *)theName query:(NSDictionary *)query
您可以使用它来推送详细视图控制器
// navigationURLString = @"example://bookDatails/Alice in WonderLand" (in URL encoding)
[self.navigationController pushViewController:[[TTNavigator navigator]
viewControllerForURL:navigationURLString query:dictionaryWithEntity] animated:YES];
或者,您可以将相关数据作为参数传递给 init 调用,或者只是实体的主键,然后在详细视图控制器中再次获取对象。