iOS检查是否正在写入文件

时间:2016-03-11 13:06:24

标签: ios nsfilemanager

我有这个保存JSON文件的代码:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{
    tabController = [self.storyboard instantiateViewControllerWithIdentifier:@"cCustomTabController"];
    dValue = [dConfiguration objectForKey:@"Buttons"];
    int i = 0;

    for (NSString* sProperty in dValue) {
        NetworkStatus internetStatus = [_reachabilityInfo currentReachabilityStatus];
        NSData *itemData = Nil;
        if (internetStatus != NotReachable)
            itemData = [util getSpecificJsonData:[sProperty valueForKeyPath:@"Item"]];
        if(itemData != nil){
            [util saveJSON:itemData withName:[NSString stringWithFormat:@"%@%@",[sProperty valueForKeyPath:@"Item"],[CommonsUtils getCommonUtil].getAppLanguage]];
            i++;
        }
    }
});

让我们说我使用这个JSON配置我的下一个屏幕,所以在我的包中我已经有一个JSON文件,以避免文件不存在但我总是从服务器更新它以进行最后一次配置可能的。

我的问题是有时需要一段时间来保存或下载文件,而我的下一个屏幕变黑,因为它没有获取文件属性,所以我猜这个时刻的文件正在被写入。

所以我的问题是,是否有办法知道文件是否正在被写入,或者有一种解决方法来确认文件是否可访问,然后阅读它。

这是我阅读文件时所做的一个例子:

if (_JsonData == nil) {
    NSString *jsonPath = [NSString stringWithFormat:@"%@/%@.json",[NSSearchPathForDirectoriesInDomains (NSDocumentDirectory,NSUserDomainMask, YES) objectAtIndex:0],_JsonConfigFile];
    _JsonData = [NSData dataWithContentsOfFile:jsonPath];
}
if (_JsonData != nil) {
    dConfiguration =[NSJSONSerialization JSONObjectWithData:_JsonData options:kNilOptions error:nil];
}

编辑1:

我需要使用队列来加快速度,因此我的应用程序是必需的,事实上我将代码更改为此,因为应用程序需要花费太多时间来获取此文件,这取决于客户端但现在其中一个正在拉动7个配置文件,性能受到影响。

1 个答案:

答案 0 :(得分:0)

我面临同样的问题..

我认为唯一的解决方案是通过设置“文件被修改”的回调来监视目标文件路径,等待一小段时间,如果没有收到......你知道它是免费且清晰的