[英]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或將其推入導航控制器,它就會消失。
我對應用程序的其余部分不太了解,無法為您提供解決此問題的代碼,但這是解決此類問題的一般思路:
這樣,您的視圖控制器就不需要彼此了解-您不需要沿鏈傳遞數據,只要需要就可以從數據源訪問它。
如果要使示例工作,則需要執行以下兩個步驟之一:
在@interface中聲明RightViewController並在初始化對象,設置屬性然后進行segue時引用該聲明。
在創建RightViewController對象的同一塊中進行segue -否則,您將丟失對它的引用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.