2014-01-14 49 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

相關問題