在iPhone上的Objective-C中将代理数据从委托发送到视图控制器

时间:2011-05-20 13:03:54

标签: iphone objective-c

注意:我一直只使用Objective-C一周。

这是我的最终目标:我想呼叫服务器并获取一个包含urls和url描述的json文件。如果我无法获取该文件,我想显示错误视图。如果我可以获取该文件,我想在表格视图中显示其内容。

限制:我在Cocoa Touch静态库中(根据要求)将其包含在一个更大的应用程序中,该应用程序将“像”应用程序一样加载它。

我现在正在做的是我正在使用Reachability来检查与主机的连接。然后我打开文件的NSURLConnection。获取文件后,我使用json-framework解析json。 jsonObject的数据类型是id(afaik表示*)。

目前,所有这一切都发生在代表中。如果我在连接或文件检索时出错,我将rootView设置为错误视图控制器。否则,我将rootView设置为我的其他视图。

我已尝试在视图控制器中将jsonObject设置为extern的方法,但这不起作用。我尝试在视图控制器中设置一个属性,并在创建它之后在控制器中设置jsonObject,但是jsonObject在那时是零,所有内容都会因为错误的选择器或某些内容而出现错误。

我是否正朝着正确的方向前进?怎么这样做?

修改

我的视图控制器被输入为UINavigationController,我将最终使用的视图控制器粘贴到其中。当我尝试在视图控制器中调用setter时,我必须将UINavigationController转换为我的视图类型才能看到setter,但是当我运行它时,我收到以下错误:

SpringboardApplication[5850:40b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UINavigationController setJsonObject:]: unrecognized selector sent to instance 0x602ed20'

我称之为:

[(LU_SOCLINKS_RootViewController *) root_navigation_controller setJsonObject:jsonObject];

1 个答案:

答案 0 :(得分:1)

“委托”是指应用代表?我假设视图控制器位于应用程序委托中的实例变量中,在这种情况下,您只需要在视图控制器中创建一个可用于传递数据的setter方法。

在视图控制器中:

·H

- (void)setData:(NSData/NSString/whatever *)data;

的.m

- (void)setData:(NSData/NSString/whatever *)data {
    vcData = [data retain];
    // do stuff with the data
}

在app delegate

[viewController setData:theData];

这是一个简单的答案。我能正确理解你的问题吗?