2016-03-22 4 views
1

У меня есть класс, у которого есть CKAsset (файл изображения), который извлекает данные из CloudKit. Однако я не могу понять, как инициализировать CKAsset. У меня нет данных во время инициализации. Класс также имеет строки, но я могу использовать их для их инициализации. Что можно использовать для инициализации CKAsset?Как инициализировать CKAsset?

Вот мой класс ...

class Locations: NSObject, MKAnnotation { 
var title: String? 
var subtitle: String? 
var coordinate: CLLocationCoordinate2D 
var story: String? 
var image: CKAsset 

override init() 
{ 
    self.title = "Test Title" 
    self.subtitle = "Test Subtitle" 
    self.coordinate = CLLocationCoordinate2D.init() 
    self.story = "" 
    self.image = <- How do I init the CKAsset before I have the data? 
} 
} 
+0

Для сохранения файла требуется файл url. Или получить актив из записи для чтения. – rmaddy

+0

Я знаю, но во время init у меня нет ничего, кроме пустого класса. – ALTVisual

+0

Вы не поняли. Обновите свой вопрос с помощью соответствующего кода. – rmaddy

ответ

0

утро, вы найдете ответ на свой вопрос погребенного в этом коде :)

функ saveLeCollection (theGlob: NSURL) {

let container = CKContainer(identifier: "iCloud.com") 
    let publicDB = container.publicCloudDatabase 

    let singleLink2LinkthemALL = CKRecordID(recordName: uniqReference) 
    let newRecord = CKRecord(recordType: "Collection", recordID: singleLink2LinkthemALL) 
    let whistleAsset = CKAsset(fileURL: theAssetURL) 
    newRecord["theAsset"] = whistleAsset 


    var localChanges:[CKRecord] = [] 
    localChanges.append(newRecord) 

    let saveRecordsOperation = CKModifyRecordsOperation(recordsToSave: localChanges, recordIDsToDelete: nil) 
    saveRecordsOperation.savePolicy = .ChangedKeys 
    saveRecordsOperation.perRecordCompletionBlock = { record, error in 
     if error != nil { 
      self.showAlert(message: error!.localizedDescription) 
      print(error!.localizedDescription) 
     } 
     // deal with conflicts 
     // set completionHandler of wrapper operation if it's the case 
    } 
    saveRecordsOperation.modifyRecordsCompletionBlock = { savedRecords, deletedRecordIDs, error in 
     if error != nil { 
      self.showAlert(message: error!.localizedDescription) 
      print(error!.localizedDescription) 
     } else { 
      // deal with conflictsay 
      // set completionHandler of wrapper operation if it's the case 

     } 
    } 

    publicDB.addOperation(saveRecordsOperation) 


} 
0

Сначала я бы сказал, что свойства настройки в init(), как вы делаете, не будут работать для CKAsset, так как до тех пор, пока вы не сделаете вызов и не передадите запись в свой класс, вы не будете знать файлURL или имя, которое C K сохранит файл CKAsset. Однако я создал эту структуру, в которой вам никогда не нужно иметь CKAsset в классе. Он справляется со всем. От загрузки до кеша и всего, что вам нужно, это идентификатор записи и ключ свойства вашего актива. Вы используете методы непосредственно на изображении. Надеюсь это поможет. https://github.com/agibson73/AGCKImage