在UITabBarController中将数组从模型传递到表视图

时间:2014-01-14 04:01:46

标签: ios objective-c json

我有一个简单的应用程序:

  • 在加载时从服务器返回数据
  • 包含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
  • 初始化我的模型
  • 当用户查看tableview时,模型已经填充了数据,因此我不需要重新发送JSON(这将是过度杀戮)。
  • 如果我使用单一模型的数据
  • ,是否需要segue

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创建和初始化的相同数据的最佳方法是什么? 想法?

1 个答案:

答案 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设置,就好像您想在表视图中编辑一个值,那么将模型对象从父项传递给子项是正确的。