iOS JSON 请求

发布于 2025-01-01 10:39:08 字数 564 浏览 1 评论 0原文

我有一个应用程序向服务器上的 JSON 发出请求以获取一些数据。一切正常,直到 JSON 中字段的值为 null 值。然后应用程序崩溃。 因此,我获取数据,将其放入 NSDictionary 中,然后访问该字典中的所有值。我已尝试使用这些 if() 语句,但如果值为 null ,应用程序仍然会崩溃。

            if([item valueForKey:@"title"]!=NULL)
            [sbcvItem setTitle:[item valueForKey:@"title"]];
            if([item valueForKey:@"desc"]!=NULL)
            [sbcvItem setDesc:[item valueForKey:@"desc"]];
            if([item valueForKey:@"url"]!=NULL)
            [sbcvItem setUrl:[item valueForKey:@"url"]];

欢迎任何建议。

I have an app making a request to a JSON on a server to fetch some data . All works fine until
the value for a field in the JSON has the null value . Then the app crashes .
So I get the data , put it in a NSDictionary , and then access all the values in that dictionary . I've tried with those if() statements but still , if the value is null , the app crashes .

            if([item valueForKey:@"title"]!=NULL)
            [sbcvItem setTitle:[item valueForKey:@"title"]];
            if([item valueForKey:@"desc"]!=NULL)
            [sbcvItem setDesc:[item valueForKey:@"desc"]];
            if([item valueForKey:@"url"]!=NULL)
            [sbcvItem setUrl:[item valueForKey:@"url"]];

Any suggestion is welcome .

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

狼性发作 2025-01-08 10:39:08

您应该使用nil,而不是NULL

我建议您通过在调试器中设置断点来检查 item 的值。也许item本身就是nil

You should use nil, not NULL.

I suggest you inspect the values of item by setting a breakpoint in the debugger. Perhaps item itself is nil?

花辞树 2025-01-08 10:39:08

NSDictionaryNSArray 都不能将 nil(或 NULL)存储为值。相反,我们使用占位符对象。该占位符对象是 NSNull 类的单例,您可以使用 [NSNull null] 获得指向它的指针。所以你需要这样测试:

if ([item objectForKey:@"title"] != [NSNull null])
    [sbcvItem setTitle:[item objectForKey:@"title"]];

Neither NSDictionary nor NSArray can store nil (or NULL) as a value. Instead, we use a placeholder object. That placeholder object is a singleton of class NSNull, and you get a pointer to it using [NSNull null]. So you need to test like this:

if ([item objectForKey:@"title"] != [NSNull null])
    [sbcvItem setTitle:[item objectForKey:@"title"]];
桜花祭 2025-01-08 10:39:08

答案取决于您从 json 解析器获得的内容。通常你会得到空对象的字符串值,例如“< null>”,在这种情况下你的 if 应该是:

if(![[item valueForKey:@"title"] isEqualToString:@"<null>"])
        [sbcvItem setTitle:[item valueForKey:@"title"]];
...

如果你实际上得到了 nil 对象,那么你可以尝试:

if(![item valueForKey:@"title"])
        [sbcvItem setTitle:[item valueForKey:@"title"]];
...

为了确保你在字典中有什么,你可以 nslog它。

The answer depends on what you getting from the json parser. usually you getting string value for null objects, for example "< null>", in this case your if should be:

if(![[item valueForKey:@"title"] isEqualToString:@"<null>"])
        [sbcvItem setTitle:[item valueForKey:@"title"]];
...

in case you actually getting nil object then you can try:

if(![item valueForKey:@"title"])
        [sbcvItem setTitle:[item valueForKey:@"title"]];
...

to make sure what you have inside the dictionary you can nslog it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文