【问题标题】:Use NSDictionary 'initWithContentsOfURL' instead Reachability.h使用 NSDictionary 'initWithContentsOfURL' 代替 Reachability.h
【发布时间】:2011-12-19 15:27:15
【问题描述】:

我想更好地了解initWithContentsOfURLNSDictionary 的功能。
这个函数自己管理连接失败吗?
来自NSDictionaryinitWithContentsOfURL 参考:

- (id)initWithContentsOfURL:(NSURL *)aURL

返回值

一个初始化的字典——可能不同于 在 URL 字典中包含接收者的原始内容,如果是,则为 nil 有错误或资源的内容无效 字典的表示。

可以,但是没有指定传递的url是否有效。

但由于我确定我的plist 格式正确,我可以使用相关方法来查看连接是否可用,而不是使用Reachability.h。当然,这只是为了了解数据连接是否可用,而不是了解哪种连接处于活动状态(例如 WiFi 等)。 我这样说是因为如果我在飞行模式下进行这样的简单测试,[dict count]; 总是返回 0。

NSURL * plist = [NSURL URLWithString: @ "http://www.example.com/example.plist"];
NSDictionary * dict = [[[NSDictionary alloc] initWithContentsOfURL:plist] autorelease];
  if ([dict count] == 0) {
      //no connection
  }

TIA。

【问题讨论】:

    标签: iphone ios nsdictionary initwithcontentsofurl


    【解决方案1】:

    是的,您可以这样做。请记住,[[NSDictionary alloc] initWithContentsOfURL:plist] 是一个同步阻塞调用。如果你阻塞主线程太久,你会得到 0x8BADF00D,并且看门狗会杀死你的进程。

    【讨论】:

    • 你的意思是如果 plist 的尺寸很大?因为我看不出有其他原因可以长时间阻塞主线程。如果我错了,请纠正我。
    • 如果由于某种原因网络连接缓慢,DNS解析,任何网络问题导致您的请求变慢www。
    • ..当然,当你说“杀死你的进程”时,你的意思是函数返回 nil 或者应用程序崩溃?!
    • 如果你的主线程阻塞时间过长(~10 秒),那么系统会杀死你的应用程序,所以它会崩溃。
    • 现在更清楚了。如果没有人提供更好的答案,我认为它已被接受......谢谢。
    猜你喜欢
    • 2012-07-29
    • 2012-05-13
    • 2014-11-02
    • 1970-01-01
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-31
    相关资源
    最近更新 更多