2015-09-14 7 views
0

Я очень новичок в CloudKit и просто пытаюсь запустить основной запрос. Я хочу извлечь из RecordType «Пользователи» и поле типа «Имя» и иметь имя, равное моей метке nameText!CKQuery с CloudKit Issue

Пожалуйста, смотрите мой код ниже:

func getUserInformation() { 
    let Pred = NSPredicate(value: true) 
    let Query = CKQuery(recordType: "Namer", predicate: Pred) 
    let AgeOp = CKQueryOperation(query: Query) 
    AgeOp.database = self.Pub 
    AgeOp.recordFetchedBlock = {(record : CKRecord!) in 
     let Recorded : CKRecord = record! 
     self.nameText.text = Recorded.objectForKey("Name") as? String 
    } 
} 


override func viewDidLoad() { 
    super.viewDidLoad() 

    self.Container = CKContainer.defaultContainer() as CKContainer 
    self.Pub = Container.publicCloudDatabase as CKDatabase 
    self.Container.accountStatusWithCompletionHandler { 
     accountStatus, error in 
     if error != nil { 

      print("Error: \(error?.localizedDescription)") 
     } else { 
    self.getUserInformation() 
     } 
    } 

} 
+0

Так в чем же проблема? Быть конкретной. – rmaddy

ответ

1

Пользователи является системной. Вы можете добавить к нему новые поля, но не рекомендуется делать это. Одна из основных причин заключается в том, что вы не можете запросить тип записи Users.

Кроме того, я вижу в вашем коде, что вы запрашиваете recordType Namer, а не пользователи. Ваш вопрос неправильный или неправильный код?

В recordFetchedBlock вы непосредственно положили результат в. text. Этот блок будет выполнен в фоновом потоке. Сначала вы должны перейти в mainQueue. Вы можете сделать следующее:

AgeOp.recordFetchedBlock = {(record : CKRecord!) in 
    NSOperationQueue.mainQueue().addOperationWithBlock { 
    let Recorded : CKRecord = record! 
    self.nameText.text = Recorded.objectForKey("Name") as? String 
    } 
} 

Когда нет совпадения запросов, тогда. recordFetchedBlock никогда не будет называться. Вы также должны установить. queryCompletionBlock

Запрос может возвращать несколько записей (если есть больше людей с тем же именем). В recordFetchedBlock вы должны добавить записи в массив. Тогда в. queryCompletionBlock вы можете использовать этот массив.