我有一个简单的应用程序:
UITabBarController
,其中包含2个ViewController
项和TableViewController
项。视图是用户看到的第一个选项卡。我有一个模型,我通过调用这个来创建数据:
self.tide = [[TideModel alloc] initWithJSON:userLocationAsString];
我传递经度和纬度,它返回json。我有我的视图然后访问该数据并在屏幕上显示没有问题。我现在要解决的是如何将数据传递到我的TableViewController
?
TableViewController.m :(返回null
- (void)viewDidLoad
{
[super viewDidLoad];
self.tide = [[TideModel alloc] init];
NSLog(@"%@", self.tide.tideSummary);
}
TableViewController.h
@property (strong, nonatomic) TideModel *tide;
少数事情
initWithJSON
initWithJSON:下方:
-(id)initWithJSON:(NSString *)location {
self = [super init];
if(self) {
NSString *locationQueryURL = [NSString stringWithFormat:@"http://x/location/%@", location];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager GET:locationQueryURL parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
// Extra code cut out to save space
..................
..................
..................
self.maxheight = [NSString stringWithFormat:@"%@", [dctOfTideSummaryStats valueForKey: @"maxheight"]];
self.tideSummary = [responseObject valueForKeyPath:@"tide.tideSummary"];
return self;
}
在我的TableViewController中使用从initWithJSON
创建和初始化的相同数据的最佳方法是什么?
想法?
答案 0 :(得分:0)
我不会在标签栏控制器中的两个不同视图控制器之间传递数据。他们是兄弟姐妹,所以他们不需要彼此紧密联系。
当您从服务器获取数据时,我会将其保留在像Core Data这样的地方。
然后您可以将NSManagedObjectContext
传递给每个视图控制器,他们可以单独访问Core Data中的数据。在标准视图控制器中,您可以使用NSFetchRequest
来检索数据。在表视图控制器中,您可以使用NSFetchedResultsController
来访问数据。
如果您使用Core Data,我建议您查看Master-Detail Xcode项目模板。确保选择“使用核心数据”。要开始,请查看Apple开发人员网站上的核心数据编程指南和核心数据相关示例代码。 Marcus Zarra的Core Data book也很出色,核心数据库和实用程序here有很好的信息。
核心数据也有替代品。您可以读取/写入plist文件,可以使用NSKeyedArchiver
。还有frameworks可以更轻松地使用模型。有许多讨论可以帮助决定选择哪种持久性方法。
但是对于这些选择中的任何一个,我建议单独从每个VC访问模型数据,而不是在它们之间传递,因为它们是兄弟姐妹。如果您有一个父/子VC设置,就好像您想在表视图中编辑一个值,那么将模型对象从父项传递给子项是正确的。