iPhone JSON 问题

Posted

技术标签:

【中文标题】iPhone JSON 问题【英文标题】:iPhone JSON Issue 【发布时间】:2011-07-28 13:37:16 【问题描述】:

我会尽量做到这一点:

我有一个外部类,它从 webservice 解析 JSON(JSON 本身很好,我已经在本地完成了,现在我让它可以通过网络访问),然后这些值将用于比较。但是,我无法在每种情况下都访问变量。我的意图是解析它们一次,并且能够随时访问它们

解析器正在从应用代理加载:

- (void)applicationDidFinishLaunching:(UIApplication *)application 
ld =[[ loader alloc] init];
[ld parse];

connectingDidFinishLoading的内容:

jsonString = [[NSString alloc] initWithData:re encoding:NSUTF8StringEncoding];

//NSLog(@"LOADER %@", jsonString);

SBJsonParser *parser = [SBJsonParser new];

se = (NSMutableDictionary *)[parser objectWithString:jsonString];

searchR = [se objectForKey:@"menu"]; 

s = [[[NSMutableArray alloc] initWithArray:[searchR objectForKey:@"tip1"] ] retain];

NSLog(@"TROLL2 %@", [s objectAtIndex:0  ]);

返回正确

然而在第一个页面加载时 viewDidLoad 结束:

    lt = [[loader alloc] init];
    NSLog(@"CALLED %@", [lt.s objectAtIndex:0] );

返回 null,在有人问之前,s 是加载器类的属性。 只是想知道我是否需要一个回调来确保类被正确加载,或者我只是度过了愚蠢的一天,从第一页就错了

 Here's the `timestaps`:
 2011-07-28 13:59:07.183 [44330:40b] TROLL2 top aaaft
 2011-07-28 13:59:07.371 [44330:40b] CALLED (null)

感谢您抽出宝贵时间阅读本文

【问题讨论】:

【参考方案1】:

难道您不必访问应用委托而不是初始化一个新委托吗?

MyAppDelegate *delegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];

NSLog(@"CALLED %@", [delegate.lt.s objectAtIndex:0]);

【讨论】:

我之前尝试过使用单例,但它导致了巨大的错误,我再试一次 解析器和值都不包含在委托中,委托包含对开始解析的加载器类的调用它是我想从不同类访问的加载器也怎么能是“[ delegate.LT.s objectAtIndex:0]" 如果我​​不想创建加载器类的新实例? 我的错误在那里......我错过了一些东西。如果'ld'是一个属性,你应该能够从那里访问's'属性。 另外,如果你要在第一页初始化它,你不是必须像在'applicationDidFinishLaunching'中那样调用'parse'方法吗? 我认为问题在于解析无法足够快地返回,我在委托中调用解析,解析类中的打印以确认输出来自第一页的空打印之后加载。委托解析调用(解析类):1。登陆页面 NSLog :2 。解析类:3

以上是关于iPhone JSON 问题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 iPhone 的 JSON 框架以编程方式生成 JSON

iPhone 上 Twitter 的 JSON 源

使 iPhone 能够获取和解析 JSON?

iPhone:JSON 消息未正确创建

mysql + json + iphone + 网络服务

Swift:写入 JSON 并在本地保存到 iPhone 文件