在继续之前,我如何等待NSURLConnection委托完成?

时间:2013-06-04 20:46:39

标签: ios objective-c multithreading delegates

我试图在应用程序启动后在模态视图中显示我的远程配置设置。所有内容都已正确连接,但视图在configs对象从其NSURLConnection委托方法更新之前更新其标签。

我正在寻找一种解决方案,让我在尝试更新视图之前完成委托方法。我宁愿不将这些功能放在委托方法中,所以我可以在其他情况下使用MYRemoteConfig

我怀疑这个解决方案是显而易见的,但是我已经看了很久才知道这个问题。


viewDidAppear{}中的MYSettingsViewController.m

MYRemoteConfig* config = [[MYRemoteConfig alloc] init];
[configs updateSettings];  // I need these delegate methods to be done 
                           // before the next line
self.customerLabel.text = configs.customer;   // Updates with empty box
self.courseLabel.text = configs.course;

-

updateSettings{}

中的

MYRemoteConfig.m

// code that gets uuid and sets up post request //

NSURLConnection* connection = [NSURLConnection connectionWithRequest:request 
                                                            delegate:self];
[connection start]; 
NSLog(@"Connection should have started.");

然后在connectionDidFinishLoading{} :(将数据附加到本地var之后)

// pull JSON objects into dictionary
[self updateProfile:settingsDictionary; 
NSLog(@"%@", settingsDictionary);  //works

updateProfile{}

// code that sets config attributes in singleton object //

self.customer = [settings objectForKey:@"Customer"];   //  I need this data
self.course = [settings objectForKey:@"Course"];       // in my view controller

1 个答案:

答案 0 :(得分:1)

您应该使MYSettingsViewController成为MYRemoteConfig控制器的委托,在MYRemoteConfig中创建委托协议,并在connectionDidFinishLoading方法中调用您在该协议中创建的方法。然后在MYSettingsViewController中实现该方法将更新客户和课程标签。