无法从 Xcode 中的 JSON 获取最新值

Posted

技术标签:

【中文标题】无法从 Xcode 中的 JSON 获取最新值【英文标题】:Can't get the latest value from JSON in Xcode 【发布时间】:2017-06-02 02:30:23 【问题描述】:

我想从 Xcode (Objective-C) 中的 JSON 获取值。 但是,如果我更改值并再次构建应用程序,则值不会更改。

我尝试的是

    将值设置为“1”并构建应用程序(第一次) -> 我可以得到“1”。

    将值从“1”设置为“0”并构建应用程序(第二次) -> 我仍然可以得到“1”。

    从 iPhone 中删除应用程序一次,然后重新构建应用程序 -> 我可以得到“0”。

为什么我无法从 JSON 中获取最新值?

代码:

-(int)getJsonValue

    Reachability* curReach = [Reachability reachabilityForInternetConnection];
    NetworkStatus netStatus = [curReach currentReachabilityStatus];

    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0);

    if (netStatus == NotReachable) 
        // Disconnect
        _jsonValue = 0;

     else 
        // Connect (Always through here)

        NSURL* url = [NSURL URLWithString:pathReview];
        NSURLSessionConfiguration* config = [NSURLSessionConfiguration defaultSessionConfiguration];
        NSURLSession* session = [NSURLSession sessionWithConfiguration:config];

        NSURLSessionDataTask* task =
        [session dataTaskWithURL:url
               completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) 

                   id jsonData = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

                   if ([jsonData isKindOfClass:[NSArray class]])
                       NSMutableArray *objects = [NSMutableArray array];
                       objects = jsonData;

                       _jsonValue = [[objects objectAtIndex:0] intValue];


                   

                   dispatch_semaphore_signal(semaphore);

               ];
        [task resume];

        dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);

    

    return _jsonValue;

【问题讨论】:

您将要提取的文件托管在哪里?您是在更新文件然后立即尝试该应用程序吗?这可能是您托管文件的服务器的问题,因为您没有在您期望的时候实际提供更新的文件。我已经看到了在 Amazon S3 上托管东西的类似问题,它可以在实际提供新文件之前保留缓存文件一段时间 我用 Coda 更改了值,并立即和 24 小时后检查了设备上的值。但仍然没有改变。在另一个应用程序上,我可以立即获取最新值。 在方法内使用块时无法返回值。你需要用块声明方法。 【参考方案1】:

你需要通过块返回值,因为你在函数中使用了块。

-(void)getJsonValueWithCallback:(void(^)(NSInteger jsonValue ))callback
    if (netStatus == NotReachable) 
        callback(0);
    
    else
        callback(1);
    

通话

[self getJsonValueWithCallback:^(NSInteger jsonValue) 
        NSLog(@"%ld",(long)jsonValue);
        //
    ];

【讨论】:

以上是关于无法从 Xcode 中的 JSON 获取最新值的主要内容,如果未能解决你的问题,请参考以下文章

无法从 VS2019 中的 Boost 属性树映射值中获取值()

删除 JSON 键中的前导和尾随空格

JavaScript:如何从 JSON 字符串中删除除值中的空格之外的所有空格?

使用 Google BigQuery 从 JSON 中的多个属性值中提取值

如何从 MySQL 列中的 JSON 文档中获取最新值?

如何从 QMultiMap 中的值中获取键?