Не удалось создать папку внутри nsoperation

Я использую этот метод внутри NSOperation для проверки и создания папки:

- (void) checkAndCreateFolderWithPath:(NSString *)path {

    NSFileManager *fileManager = [NSFileManager defaultManager];

    NSString *pathDaControllare = [[self getLibraryPath] stringByAppendingPathComponent:path];

    NSError *error = nil;

    BOOL isDir;
    BOOL exists = [fileManager fileExistsAtPath:pathDaControllare isDirectory:&isDir];
    if (exists) {
        if (isDir) {

        }
    }
    else {
        [fileManager createDirectoryAtPath:pathDaControllare
               withIntermediateDirectories:YES
                                attributes:nil
                                     error:&error];

        NSLog(@"%@",error);
    }

}

Используя NSOperation, я получаю эту ошибку: Ошибка Domain=NSCocoaErrorDomain Code=512 "Операция не может быть завершена.

если я не использую NSOperation все работает отлично, это nsoperation

- (void) main {

    NSString *filePath = [fileDict objectForKey:@"url"];

    NSString *urlStr = [NSString stringWithFormat:@"http://www.allmyapp.net/wp-content/iFormulario_Update/%@",filePath];
    urlStr = [urlStr stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];


    NSURLRequest *urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:urlStr]];

    [NSURLConnection sendAsynchronousRequest:urlRequest
                                       queue:[[NSOperationQueue alloc] init]
                           completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){
                               if (data) {

                                   NSString *folderPath = [filePath stringByReplacingOccurrencesOfString:[filePath lastPathComponent] withString:@""];
                                   [self checkAndCreateFolderWithPath:folderPath];

                                   NSString *pathFile = [[self getLibraryPath] stringByAppendingString:filePath];
                                   [data writeToFile:pathFile atomically:YES];

                                   [self addSkipBackupAttributeToItemAtURL:[NSURL URLWithString:pathFile]];

                                   [[NSNotificationCenter defaultCenter] postNotificationName:@"endFile" object:nil];

                                   [self willChangeValueForKey:@"isFinished"];
                                   [self willChangeValueForKey:@"isExecuting"];

                                   isExecuting = NO;
                                   isFinished = YES;

                                   [self didChangeValueForKey:@"isExecuting"];
                                   [self didChangeValueForKey:@"isFinished"];
                               }
                           }];
}

И этот метод для создания очереди:

    for (NSDictionary *dict in fileDaScaricare) {
    DownloadOperation *downloadOperation = [[DownloadOperation alloc] initWithDictionary:dict];
    [self.operationQueue addOperation:downloadOperation];

}

1 ответ

Вы можете попробовать что-то вроде этого:

NSString *stringPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,     NSUserDomainMask, YES)objectAtIndex:0]stringByAppendingPathComponent:@"/MyFolder"];
NSError *error = nil;

    if (![[NSFileManager defaultManager] fileExistsAtPath:stringPath])
        [[NSFileManager defaultManager] createDirectoryAtPath:stringPath withIntermediateDirectories:NO attributes:nil error:&error];

    NSString *docFolderPath   =   [stringPath stringByAppendingString:[NSString stringWithFormat: @"/%@", self.downloadedFilename]];
[data writeToFile:docFolderPath atomically:YES];

У меня это сработало, и я могу скачать файл в MyFolder. Надеюсь, это работает для вас. Пожалуйста, дайте мне знать, если это работает.

Другие вопросы по тегам