2014-01-14 34 views
0

我有一个简单的应用程序是:从一个服务器上的负载传递数组从模型到表视图内的UITabBarController

  • 返回数据
  • 包含一个UITabBarController与2项ViewControllerTableViewController。该视图是用户看到的第一个选项卡。

我有一个模型,我通过调用这个数据创造:

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(这会超过kill)。如下:
  • 请问如果我用从一个单一的模式

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

如果NSLog(@“%@”,self.tide.tideSummary)正在打印正确的数据,然后在viewDidLoad方法,那么你可以简单地把这些数据放在你的TableView中。我想你不应该有任何问题做到这一点! – Nayan

+0

它返回'''(null)''' - 我会更新我的问题 – Coughlin

+0

@NSS我看着一个segue,但我没有通过插座发送。可以肯定,赛格是不正确的?也许如果我从tableview - > detailview(没有标签栏) – Coughlin

回答

0

我不会在标签栏控制器中的两个不同的视图控制器之间传递数据。他们是兄弟姐妹,所以他们不需要紧密相连。

当您从服务器获取数据时,我会将其保存在Core Data等某处。

然后,您可以将NSManagedObjectContext传递给每个视图控制器,并且它们可以单独访问Core Data中的数据。在标准视图控制器中,您可以使用NSFetchRequest来检索数据。在表格视图控制器中,您可以使用NSFetchedResultsController来访问数据。

如果您使用核心数据,我建议您查看Master-Detail Xcode项目模板。确保选择“使用核心数据”。要开始查看Apple开发人员网站上的Core Data Programming Guide和Core Data相关示例代码,Marcus Zarra的Core Data book也非常出色,核心数据库和实用程序here也有很好的信息。

核心数据也有其他选择。您可以读取/写入plist文件,您可以使用NSKeyedArchiver。也有frameworks使模型更容易工作。有许多讨论可以帮助决定选择哪种持久性方法。

但有了这些选择,我建议从每个VC单独访问模型数据,而不是在它们之间传递它们,因为它们是兄弟姐妹。如果你有一个父/子VC的设置,就像你希望在表格视图中编辑一个值,那么将模型对象从父项传递给子项是正确的。

+0

所以这将是最好的方式呢?为什么我不能访问我的模型?我的视图控制器访问它,所以不能我的表视图? – Coughlin

+0

看起来您的模型正在创建并在第一个VC中加载数据。但是你的TVC [[TideModel alloc] init]中的这个语句只会创建一个新的空模型对象,与第一个VC中的模型对象不同。所以理想情况下,您将拥有一个共同的地方来坚持您的模型,然后您可以从任何风险投资者访问它。 – Jesse

+0

谢谢你。最终,生病时会有一个表格视图,用搜索 - >点击 - >查看详细视图(我现在已经有了)。我只是根据用户位置返回(开始瘦)。尽管在我的情况下,数据与两个标签都有关。有没有另外一种方法来创建我的模型对象,并在没有CoreData的情况下访问数据?我觉得它可能是矫枉过正,当我想要访问创建时创建的阵列时,我启动我的模型 – Coughlin

相关问题