2015-08-04 1 views
0

У меня есть еще один вопрос с новичком. Надеюсь, один из вас, программистов, может помочь мне в этом.Хранить абзацы текста (включая разрывы строк) в наборе облаков и запросе

Я пытаюсь извлечь несколько абзацев текста (например, новостной статьи) из CloudKit. Я не знаю, как отформатировать текст так, чтобы он включал разрыв строки. Мне сказали, что я должен использовать CKAsset вместо String в записи CloudKit, но я не понимаю, как он должен быть отформатирован.

Может ли кто-нибудь помочь мне понять это больше?

Заранее спасибо.

ответ

3

Нужно ли иметь \n в качестве нового идентификатора строки? CKAsset это путь, вам просто нужно:

  • создать файл
  • создать актив с URL-адресом файла
  • сохранить его в базу данных
  • удалить временный файл впоследствии.

Когда вы получаете запись из CloudKit:

  • доступа это путь к файлу
  • загрузки данных с использованием NSFileManager
  • расшифровывает данные (это использует NSString, что скука, но дон не знаю другого способа)

Записать на фото:

let str = "sample \n string save to file" 
if let url = NSURL(fileURLWithPath: NSTemporaryDirectory())?.URLByAppendingPathComponent("tempFile", isDirectory: false) { 
    if str.writeToURL(url, atomically: true, encoding: NSUTF8StringEncoding, error: nil) { 
     let asset = CKAsset(fileURL: url) 
     let record = CKRecord(recordType: "TextAsset") 
     record.setValue(asset, forKey: "text") 
     CKContainer.defaultContainer().publicCloudDatabase.saveRecord(record) { savedRecord, error in 
      if error != nil { 
       println(error) 
      } else { 
       println(savedRecord) 
      } 
      // do this in completion closure, otherwise the file gets deleted before uploading 
      NSFileManager.defaultManager().removeItemAtURL(url, error: nil) 
     } 
    } 
} 

нагрузки запись:

let predicate = NSPredicate(value: true) 
let query = CKQuery(recordType: "TextAsset", predicate: predicate) 
CKContainer.defaultContainer().publicCloudDatabase.performQuery(query, inZoneWithID: nil) { queryRecords, error in 
    if let records = queryRecords { 
     for record in records { 
      let asset = record.valueForKey("text") as! CKAsset 
      if let content = NSFileManager.defaultManager().contentsAtPath(asset.fileURL.path!) { 
       let text = NSString(data: content, encoding: NSUTF8StringEncoding) 
       println(text) 
      } 
     } 
    } 
} 

Не забывайте обрабатывать ошибки должным образом, это просто витрина образец кода.

+0

Привет, это будет очень глупый вопрос, но в какой программе я храню массовый текст? – user3136022

+0

Идея заключается в том, что я загружаю текст непосредственно в базу данных облачных наборов. Я фактически не буду сохранять какие-либо данные в приложении и загружать его. – user3136022

+0

Вы сохраняете текст в файл, вызывая 'str.writeToURL', чтобы получить URL-адрес для создания' CKAsset'. После сохранения в облаке вы удаляете его при завершении закрытия с помощью 'NSFileManager.defaultManager(). RemoveItemAtURL (url, error: nil)' – libec