簡體   English   中英

AFNetworking在ViewController之間共享JSON數據?

[英]AFNetworking sharing JSON Data between ViewControllers?

我是編程的新手,請原諒我的無知。 如果有人能指出我正確的方向,將不勝感激。

我遵循了AFNetworking的本教程( http://www.raywenderlich.com/30445/afnetworking-crash-course ),並使其在我自己的項目中可以從網絡解析JSON。

我還沒有弄清楚如何將THAT數據傳輸到另一個UIViewController。 我已經看到在視圖控制器之間傳遞數據和其他相關問題都無濟於事。

我嘗試使用Delegates&Protocols / Singletons / GlobalVariables / ReferencingClasses,當我NSLog值始終為NULL時,我可以讓它們用於其他與JSON不相關的材料。 (此外,JSON數據將發生變化,我在某處看到其中一些選項不可更改)

在我看來,該教程似乎使用自定義的NSDictionary類來存儲JSON數據,並使用prepareForSegue傳遞給它:但是據我所知,這只是一個Storyboard方法。 我正在使用筆尖文件。 我應該將整個項目切換為情節提要樣式還是使用Nibs / Xibs做到這一點?

感謝您抽出時間來閱讀。 我想做的最后一件事是給您一個問題,但我已經被卡住了一段時間了。

編輯:我已經在執行請求的ViewController上檢索了JSON數據,但是它不會轉移到其他ViewController,並且我認為在需要的每個新Controller上請求JSON數據都是一種不好的做法。

EDIT2這是一些代碼(如果需要,我可以發布更多代碼)

-(void)jsonData { NSLog(@"Loading JSON..."); NSURL *url = [NSURL URLWithString:@"http://fillerCode.com"]; AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url]; NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:@"1",@"station",@"1",@"previous_song", nil]; NSURLRequest *request = [httpClient requestWithMethod:@"POST" path:@"/scripts/MoreFillerCode" parameters:params]; AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest: request // JSON SUCCESS!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) { NSLog(@"Getting Next Song..."); self.get_next_song = (NSDictionary *)JSON; RightViewController *rightViewController = [[RightViewController alloc] init]; rightViewController.get_next_song = self.get_next_song; [self updateViewStuff]; } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) { UIAlertView *av = [[UIAlertView alloc] initWithTitle:@"Error Retrieving Data" message:[NSString stringWithFormat:@"%@",error] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [av show]; NSLog(@"Operation Failed"); }]; [operation start]; NSLog(@"JSON Operation Started"); }

您的主要問題:

我已經在執行請求的ViewController上檢索了JSON數據,但它不會轉移到其他ViewController。

此問題的原因:

RightViewController *rightViewController = [[RightViewController alloc] init];
rightViewController.get_next_song = self.get_next_song;

[self updateViewStuff];

您正在分配和實例化一個全新的視圖控制器,然后在其上設置一個屬性。 此后,您將不再提及rightViewController ,並且在完成塊結束時將取消分配它。 每當您進行alloc-init操作時,您都在創建一個新的,如果不使用它,則將其設置為@property或將其推入導航控制器,它就會消失。

我對應用程序的其余部分不太了解,無法為您提供解決此問題的代碼,但這是解決此類問題的一般思路:

  • 創建一個新類(NSObject,而不是UIViewController),該類處理發送/接收數據。 將所有AFNetworking東西放在這里。
  • 當視圖控制器需要數據時,請其向該新對象詢問數據。 數據應返回給視圖控制器。 該對象可以使用保存的數據(如果可用),或者使用AFNetworking進行請求(如果沒有)

這樣,您的視圖控制器就不需要彼此了解-您不需要沿鏈傳遞數據,只要需要就可以從數據源訪問它。

如果要使示例工作,則需要執行以下兩個步驟之一:

  1. 在@interface中聲明RightViewController並在初始化對象,設置屬性然后進行segue時引用該聲明。

  2. 在創建RightViewController對象的同一塊中進行segue -否則,您將丟失對它的引用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM