Xcode: CKAsset в CloudKit

В моем коде ниже,

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *localPath = [[paths objectAtIndex: 0] stringByAppendingPathComponent: @"temporary.png"];
    NSLog(@"local path=%@", localPath);
    [UIImagePNGRepresentation(self.scriptPicture.image) writeToFile:localPath atomically:YES];
    //[opData.scripts writeToFile:localPath atomically:YES];
    if ([[NSFileManager defaultManager] fileExistsAtPath:localPath]) {
        NSLog(@"file is exist");
        NSURL *fileurl=[NSURL URLWithString:localPath];
        CKAsset *myfile=[[CKAsset alloc] initWithFileURL:fileurl];
        //postRecrod[@"scriptPicture"]=myfile;
        [postRecrod setObject:myfile forKey:@"scriptPicture"];
}

ошибка произойдет в строке "CKAsset *myfile=[[CKAsset alloc] initWithFileURL:fileurl];"сообщение об ошибке ниже:

Завершение работы приложения из-за необработанного исключения "NSInvalidArgumentException", причина: "Не-файл URL"

Я не знаю, как решить эту проблему и искать в Интернете всю ночь напролет, но без помощи. Пожалуйста, помогите мне! Я начинающий код!

2 ответа

Вы строите свой fileurl неправильно.

Заменить эту строку:

NSURL *fileurl=[NSURL URLWithString:localPath];

с этим:

NSURL *fileurl=[NSURL fileURLWithPath:localPath];

Всегда используйте fileURLWithPath: метод для создания файла URL из пути к файлу. использование URLWithString: при создании URL-адреса для строк, представляющих правильный URL-адрес, начиная со схемы (например, http:, mailto: и т. д.).

Я думаю, что ваша строка будет начинаться с file:// Не могли бы вы изменить его на что-то вроде этого:

В Свифте:

CKAsset(fileURL: NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("temporary", ofType: "png")!))
Другие вопросы по тегам