2016-05-31 7 views
0

、次のコード(またはそれに非常に近いが)... RECORDTYPE配列から1つのcloudkitインスタンスをretreieveうテーブルビューコントローラにCloudKit RECORDTYPEインスタンスを表示するには、どのように私の知る限り

let pred = NSPredicate(value: true) 

    let query = CKQuery(recordType: "Stores", predicate: pred) 

    publicDatabase.performQuery(query, inZoneWithID: nil) { (result, error) in 

     if error != nil 
     { 
      print("Error" + (error?.localizedDescription)!) 
     } 
     else 
     { 
      if result?.count > 0 
      { 
       let record = result![0] 

       dispatch_async(dispatch_get_main_queue(), {() -> Void in 

        self.txtDesc.text = record.objectForKey("storeDesc") as? String 
        self.position = record.objectForKey("storeLocation") as! CLLocation 
        let img = record.objectForKey("storeImage") as! CKAsset 
        self.storeImage.image = UIImage(contentsOfFile: img.fileURL.path!) 
....(& so on) 

しかし、どのように、私のDiningTypeレコードの各インスタンスの情報に各セルを設定できるように、(コード内の物理的な位置?)を照会するのはいつですか?

たとえば、私はdidreceivememory警告関数の中でクエリしますか?またはcellforRowatIndexPath?または他の!

上記のコードで誤解している場合は、メモに記入してください。この時点でのすべてのヘルプは貴重であり、非常に高く評価されています。

+0

アウトレットが正しく接続されていますか?このコードを実装していない場合は変更できますか?その場合は、self.tableView.reloadData()を追加してください。結果が返される前に、tableViewがdefロードである非同期コードを実装しています。 – rMickeyD

+0

どこから始めるのですか?私が投稿したコードはtutoria(https://www.youtube.com/watch?v=J9BJijpVkyE)から取られました。残念ながら、チュートリアルでは、icloudからすべての情報をダウンロードするのではなく、すでに定義されているインスタンスの名前を入力して、インスタンスの残りのデータをダウンロードできます。しかし、これはすべてそれ自身の「検索」UIButtonに組み込まれています。だから、私はその情報でテーブルを作成できるようにするために、私が述語/クエリ/レコードコードをどこに入力するのかと思っています。 – jonpeter

+0

http://www.appcoda。com/cloudkit-introduction-tutorial/- 私はこれを見て、私が自分の疑問に答えて返すことにします。 – jonpeter

答えて

0

もう少し詳しく説明することなく、残りのコードについてはいくつかの前提を示します。私は仮定します:

  • あなたはあなたのデータを表示するのUITableViewを使用している
  • あなたのUITableView(のtableView)が正しく、適切なアウトレットを含めて、あなたのビューにtableViewDataSourceとtableViewDelegateを割り当て、あなたのViewControllerに配線されており、それらのプロトコルに必要なメソッドを実装します。
  • データ(セルごと)は、配列のようないくつかのタイプのコレクションに格納されます(多くのオプションがありますが)。

データベース(この場合はCloudKit)からレコードを取得するコードを呼び出すと、データは最終的に配列に格納されます。あなたの配列が変更されたら(新しいデータや更新されたデータ)、tableView.reloadData()を呼び出してtableViewに何かが変更されたことを伝え、セルをリロードします。

セルは、tableView(:cellForRowAtIndexPath :)で配線されています(手動)。それはあなたがのtableView(実装提供(各アイテムに対してこのメ​​ソッドを呼び出します。あなたがのUITableViewのを使用してに慣れていない場合、彼らは最初は難しいように見えることができnumberOfRowsInSection :)とnumberOfSectionsInTableView(_ :)

をあなたがしたい場合

+0

ありがとうございます!そして、ほとんどの場合、あなたはスポットにいます。私は、クラウドキットのデータを表示するためのテーブルビューを持っています。これは、テーブルビュー機能と同様にフェッチ機能が必要なようです。さて、ユーザーも私もレコードタイプに追加をしていますので、reloaddata関数はまだ必要でしょうか?また、どこにreccommenfを置くと、私は空の配列を将来のクラウドキットデータに置きますか? – jonpeter

+0

データを保持する配列は、呼び出しが必要な場所の範囲内であればどこでもかまいません。通常は、tableviewが初期化された後にデータが変更された場合は、reloadData()を呼び出すだけで、配列が設定されていれば(テーブルビューを保持するビュー/クラスの定義内で、テーブルビューを表示する前にそれを呼び出す必要はありませんが、そうでなければ必要です。CloudKitからデータが来ているので、データを取得した後にテーブルビューをリロードする必要があると思いますか? – DJohnson

+0

テーブルビューをリロードする必要があるデータを取り出したにもかかわらず、ここで作業している多くの概念がありますか? – jonpeter

-1

最初に、コンテナ、パブリックデータベース、述部、およびクエリ入力の設定という典型的なクラウドキットの要件に注意を払わなければなりませんでした。データベースは、 "DiningType"というレコードタイプのクエリを実行します。プログラムの最初のif文によって、エラーが検出された場合、コンソールは "Error"と表示して処理を終了します。発見された各結果viewdidload関数の上に作成されたカテゴリ配列にクエリに関連付けることができます。

var categories: Array<CKRecord> = [] 

override func viewDidLoad() { 
    super.viewDidLoad() 


    func fetchdiningtypes() 
    { 

     let container = CKContainer.defaultContainer() 
     let publicDatabase = container.publicCloudDatabase 
     let predicate = NSPredicate(value: true) 
     let query = CKQuery(recordType: "DiningType", predicate: predicate) 


     publicDatabase.performQuery(query, inZoneWithID: nil) { (results, error) -> Void in 
      if error != nil 
      { 
       print("Error") 
      } 
      else 
      { 
       for result in results! 
       { 
        self.categories.append(result) 
       } 

       NSOperationQueue.mainQueue().addOperationWithBlock({() -> Void in 
        self.tableView.reloadData() 


       }) 
      } 
     } 

    } 

    fetchdiningtypes() 
+0

コードのみの回答はぶつかります。何が間違っていたか、そしてあなたの答えがどのように問題を解決したかについての詳細を含めるために、あなたの答えを更新してください。あなたが実際にあなたの質問のためのより多くの情報を提供されている場合は、この "答え"を削除し、関連する詳細であなたの質問を編集してください。 – rmaddy