2014-12-03 65 views
3

我是CloudKit和iOS開發新手。我已經手動將一些記錄添加到CloudKit Dashboard中,現在我想通過自動創建的ID檢索它們。然後我想在一個靜態tableview單元格的UILabel中顯示記錄的值。有兩個問題:1)。從控制面板使用ID時,出現xCode錯誤(錯誤顯示爲「expected」,「separator」);和2)。我找不到任何將靜態tableview單元格中的UILabel記錄值的示例。 (特別是對於迅捷)。任何幫助是極大的讚賞!如何使用「fetchWithRecordID」在CloudKit儀表板中自動生成ID?

這裏是我的代碼:

override func viewDidLoad() { 
    super.viewDidLoad() 

    publicDB.fetchRecordWithID (f7080e7a-f8c3-4db6-b8ee-642a011a6762) { record, error in 


     if error != nil { 

      println("there was an error \(error)") 

     } else { 

      // this is my UILabel in a static tableview. The record's only attribute is //called "subCategory" 

      plasticOneValue.text = record["subCategory"] 
     } 
    } 
} 

更新:或者 - 我想這個代碼,並構建成功,但控制檯說,它有一個內部錯誤和的UILabel還是空白......任何建議在我做錯了上面的代碼或這段代碼?

override func viewDidLoad() { 
    super.viewDidLoad() 

    // I created a new CKRecord ID Object and provided the existing ID in dashboard and //it fixed the error about requiring a "," separator 

    var plasticOneID = CKRecordID(recordName: "f7080e7a-f8c3-4db6-b8ee-642a011a6762") 

    publicDB.fetchRecordWithID (plasticOneID) { record, error in 

     if error != nil { 

      println("there was an error \(error)") 

     } else { 

      self.plasticOne.text = (record.objectForKey("subCategory") as String) 

     } 
    } 
} 

回答

3

這是兩個不同的問題

  1. 查詢的ID時,你必須爲你的第2個樣品中沒有用來查詢CKRecordID
  2. 當訪問UI,你必須這樣做在主隊列上。

那麼接下來的代碼會是這樣的:

publicDB.fetchRecordWithID(CKRecordID(recordName: "f7080e7a-f8c3-4db6-b8ee-642a011a6762"), completionHandler: {record, error in 
    if error != nil { 
     println("there was an error \(error)") 
    } else { 
     NSOperationQueue.mainQueue().addOperationWithBlock { 
      self.plasticOne.text = (record.objectForKey("subCategory") as String) 
     } 
    } 
}) 
+1

當我嘗試你的代碼,我仍然得到這個錯誤,所以我必須做別的事情錯了 - 「有一個錯誤」 我也有這樣的代碼 - '進口的UIKit 進口CloudKit 讓myContainer中:CKContainer = CKContainer.defaultContainer() 讓publicDB:CKDatabase = myContainer.publicCloudDatabase 讓privateDB:CKDatabase = myContainer.privateCloudDatabase class TableViewController:UITableViewController { @IBOutlet weak var plasticOne:UILabel! @IBOutlet weak var plasticTwo:UILabel! @IBOutlet弱var plasticThree:UILabel!' @EdwinVermeer – 2014-12-03 21:45:34

+1

感謝關於隊列的額外信息。我還在學習。每次我在UI中獲取,保存或更新數據時,是否需要調用該NSOperationQueue.mainQueue?我會在什麼情況下使用後臺隊列?在此先感謝您的幫助! – 2014-12-03 21:48:28

+0

所有回調塊總是在單獨的隊列上調用。如果你操縱用戶界面,那麼你需要在主隊列上這樣做。您確定帶有該ID的記錄是否在您的公共數據庫中?錯誤代碼2005很奇怪。您的設備上使用的是與開發者帳戶相同的iCloud帳戶嗎?也許那個RecordID在私人數據庫中,你在查詢publicDB? – 2014-12-04 06:50:36