【问题标题】:Fetch multiple Record Types from CloudKit从 CloudKit 获取多个记录类型
【发布时间】:2017-10-06 06:36:51
【问题描述】:

我有一个包含四个不同段的分段控件,并希望一次获取多个记录类型。一次只能取一个。想要获取所有 4 种记录类型,使用分段控件将它们显示在相应的表视图中。有没有办法。我对 Swift 和 iOS 还很陌生。

@IBOutlet weak var segmentControl: UISegmentedControl!

let recordType = "WebBooks"

var web = [CKRecord]()
var mobile = [CKRecord]()
var windows = [CKRecord]()
var databases = [CKRecord]()

func fetchBooksFromCloud() {
        let cloudContainer = CKContainer.default()
        let publicDatabase = cloudContainer.publicCloudDatabase
        let predicate = NSPredicate(value: true)
        let query = CKQuery(recordType: recordType, predicate: predicate)
}

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

    var returnValue = 0

    switch segmentControl.selectedSegmentIndex {
    case 0:
        returnValue = web.count  
    default:
        break
    }
    return returnValue
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCell(withIdentifier: 
    "CategoriesCell", for: indexPath) as! HomeTableViewCell

    switch segmentControl.selectedSegmentIndex {
    case 0:

        let webBooks = web[indexPath.row]

        cell.bookName.text = web.object(forKey: "name") as? String
        cell.authorName.text = web.object(forKey: "author") as? String

        if let image = web.object(forKey: "image") {
            let imageAsset = image as! CKAsset

            if let imageData = try? Data.init(contentsOf: imageAsset.fileURL) {
                cell.bookImageName.image = UIImage(data: imageData)
            }
        }
    default:
        break
    }
    return cell
}

【问题讨论】:

    标签: ios swift uitableview uisegmentedcontrol cloudkit


    【解决方案1】:

    更多参考:iCloud in Swift

    func getResults(){
    
            let container = CKContainer.default()
            let privateDatabase = container.privateCloudDatabase
            let predicate = NSPredicate(value: true)
            let query = CKQuery(recordType: "UserDetails", predicate: predicate)
    
            privateDatabase.perform(query, inZoneWith: nil) { (results, error) -> Void in
                if error != nil {
                    print(error?.localizedDescription)
    
                    MBProgressHUD.hide(for: self.view, animated: true)
                }
                else {
                    print(results)
    
                    for result in results! {
                        self.arrayDetails.append(result)
                    }
    
                    OperationQueue.main.addOperation({ () -> Void in
                        self.tableView.reloadData()
                        self.tableView.isHidden = false
                        MBProgressHUD.hide(for: self.view, animated: true)
                    })
                }
            }
    
    }
    

    【讨论】:

    • 那是一次只获取一种记录类型UserDefaults。我想一次获取多个
    • 您可以获取包含多个对象的结果数组。
    • 你有没有找到办法做到这一点?据我所知,一次只能使用一个recordType。但是操作的好处是您可以为每个recordType 将它们堆积在一个循环中,并让系统来处理它。 :)
    猜你喜欢
    • 2015-04-08
    • 2022-12-21
    • 1970-01-01
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多