Objective-C NSData initWithContentsOfFile, проверить, существует ли файл? - PullRequest
2 голосов
/ 06 июля 2011

Стоит ли проверять, существует ли файл по заданному пути при попытке прочитать данные в объект NSData?Сейчас я этого не делаю, но мой код работает, так как мой массив, который должен быть заполнен данными из файла, будет установлен равным nil, и позже я смогу проверить, равен ли этот массив нулю в моем приложении.Но я думаю, что код, возможно, «уродлив» и будет работать лучше, если я сделаю проверку (как в комментарии к коду).

NSData *codedData = [[NSData alloc] initWithContentsOfFile:[CareersParser dataFilePath]];

    /*
    if (codedData != nil) {
        //do the below (not commented out code)
    } else {

        //file doesn't exist at the given path
        [codedData release];
        return nil;
    }
    */

    NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:codedData];
    NSArray *careers = [unarchiver decodeObjectForKey:kDataKey];    
    [unarchiver finishDecoding];

    NSMutableArray *ids = [[NSMutableArray alloc] init];

    for (Career *career in careers) {
        [ids addObject:[career id]];
    }

    // Sort the array in an orderly fashion
    NSArray *sortedIds = [ids sortedArrayUsingSelector:@selector(caseInsensitiveCompare:)];

    // Release allocated memory
    [ids release];
    [unarchiver release];
    [codedData release];

    return sortedIds;

Ответы [ 2 ]

2 голосов
/ 06 июля 2011

Мне кажется разумным, что я бы изменил оператор if, чтобы покончить с предложением else.

if (nil == codedDate) {
  [codedData release];
  return nil;
}

... Do the rest of your code

Apple предлагает здесь , чтобы вы попытались выполнить такую ​​операцию, какзагрузка данных, как вы предложили.Пока вы не попытаетесь сделать [[NSManager defaultManager] fileExistsAtPath:path], вы не будете вводить условия гонки.

1 голос
/ 06 июля 2011

Вы этого не сделаете, и это может привести к гонке, поэтому она будет более "уродливой".Просто проверьте, если codedData , если ноль, в случае сбоя чтения.

...