将数据从AppDelegate传递到iOS视图

3

我想在启动时获取一个JSON并将其作为资源使用。

我在didFinishLaunchingWithOptions中发出请求,请求如下:

NSString *urlAsString = @"myurl";
NSURL *url = [NSURL URLWithString:urlAsString];
NSURLRequest *urlRequest = [NSURLRequest requestWithURL: url];

NSURLResponse *response = nil;
NSError *error = nil;

NSData *data = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:&error];
if ([data length] > 0 && error == nil) {
    NSString* responseString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@"Data is okay. Size: %lu and result: %@", (unsigned long)[data length], responseString);
}

它目前运行良好,但是我想将MyAppDelegate中的data传递给myViewController。 因此,我将使用UILabel来处理数据。

具体该怎么做呢?在AppDelegate中进行请求是否正确?

非常感谢任何帮助。

1个回答

4

首先:在app-delegate中发出请求并不是一个好的解决方案。你应该创建一些后台启动任务,这样你就可以向用户显示一些旋转器。 其次:你可以将NSString变量存储在appDelegate中,并创建getter(属性)来访问它。这样你就可以访问你的App Delegate实体。

[[UIApplication sharedApplication] delegate];

第三步:您可以通过UIViewController的自定义构造函数或属性进行设置。

明白了,非常感谢。我想这种同步连接的方式会阻塞当前线程,因此无法使用旋转器。那么你能给出任何关于启动任务的示例吗?这是常见的名称吗?我找了一圈,但没有找到合适的答案。再次感谢。 - Newbie iOS Developer
我的意思是,您可以创建自己的对象,在后台发出请求,并从应用代理类中初始化此对象,并等待此对象的回调。因此,您可以冻结应用程序,直到此任务完成。 - Jlexyc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接