当我CloudKit在 Xcode 中打开时,它会根据 app 的名称设置并创建一个默认容器。是否可以设置不同的默认名称?我不想在 CloudKit 仪表板的列表中看到新的容器名称,而是使用现有的。

我正在尝试创建CloudKit文本搜索查询.什么工作是查询以搜索文本开头的记录,如下所示:
NSPredicate(format: "Text BEGINSWITH %@", searchText)! 
令牌搜索也有效(查询其中一个输入的单词是否在记录中的某个位置),如下所示:
NSPredicate(format: "allTokens TOKENMATCHES[cdl] %@", searchText)! 
你可以在EVCloudKitDao的演示应用程序中看到这些查询(参见截图)
但现在我想结合这两个查询,以便结果感觉更完整.我尝试使用此查询:
NSPredicate(format: "Text BEGINSWITH %@ OR allTokens TOKENMATCHES[cdl] %@", searchText, searchText)! 
但是我会得到这个CloudKit错误:
因未捕获的异常'CKException'而终止应用程序,原因:'意外表达:文本BEGINSWITH"Y"或allTokens TOKENMATCHES [cdl]"Y"'
除此之外,我还尝试了这样的NSCompoundPredicate:
    var p1 = NSPredicate(format: "allTokens TOKENMATCHES[cdl] %@", searchText)!
    var p2 = NSPredicate(format: "Text BEGINSWITH %@", searchText)!
    var p = NSCompoundPredicate(type: NSCompoundPredicateType.OrPredicateType, subpredicates: [p1, p2])
但是那个给出了同样的错误:
由于未捕获的异常'CKException'而终止应用程序,原因:'意外的表达式:allTokens TOKENMATCHES [cdl]"y"或文本BEGINSWITH"y"'
奇怪的是,它在使用AndPredicateType而不是OrPredicateType时确实有效
有谁知道像这样的查询的替代解决方案?由于它是一个自动完成功能,执行2个查询并组合结果不是一个真正的选择.
我已将CloudKit开发环境部署到生产环境中.以前我在开发环境中测试了我的应用程序,它没有任何错误.现在在生产环境中运行应用程序,当客户端想要在CloudKit中插入记录时,我收到此错误:
Error saving record <CKRecordID: 0x17fddd60; 0188D8FE-F9EB-49A0-9CC2-A2AE513E9E25:(_defaultZone:__defaultOwner__)> to server: Cannot create a new field type in production schema
你有什么主意吗?
我写的应用程序将让人们存储几张照片,并将它们与一个对象相关联.
我以为我会使用CloudKit来存储这些图像,就像CKAssets一样.
在CloudKit中,除了其他属性列表类型之外,我还可以创建一个CKAsset,并将文件附加到它(在我的例子中是一个JPEG).我还可以附加任何这些类型的NSArray,包括CKAsset.
我的用户可能会为每个对象发送5张图片,或者可能是30 ...谁知道.
只是想知道是否有人遇到过这样的情况,并且看到了这种方法的缺点.(例如,为每个图像创建单独的CKRecords,并添加对另一个CKRecord的引用).
所以我hava记录包含一个CKReference List字段.
现在我想批量获取所有引用的(通过这个CKReferences列表)记录(来自另一种类型).
有任何想法吗?
对于SO来说,这可能太简单了,但是对于同时使用Cloudkit / Core数据的用户,如果对数据库本身进行了任何更改,是否需要在Cloudkit中迁移类似于Core Data的数据?
例如,如果您完全调整了核心数据模型,则必须执行迁移过程,以确保该应用程序仍能正常运行。Cloudkit是一样的吗?
根据我的理解,没有必要进行迁移过程(判断是否进行更改并在模拟器中运行它们就很好了),但是我想在上传到App Store之前进行确认。谢谢你的帮助!
我无法保存已保存的记录。recordToSave是从服务器下载的CKRecord。可以更新吗?
recordTosave.setValue("cat", forKey: "animal")
let publicData = CKContainer.defaultContainer().publicCloudDatabase
publicData.saveRecord(recordToSave, completionHandler:{(record: CKRecord?, error: NSError?) in
    if error == nil{  
    }else{
        print(error.debugDescription)
    }
})
我正在尝试将 cllocationcoordinate2d 转换为 cllocation。我在下面代码的第 12 行收到错误“容器文字中的预期表达式”。我还在第 13 行收到错误“无法将 cllocationcoordinate2d 类型的值转换为期望值 cllocation”,但这是因为第 12 行工作不正常。
@IBAction func makeEvent(sender: UIButton)
    {
        let center = CLLocationCoordinate2D(latitude: loc1.coordinate.latitude, longitude: loc1.coordinate.longitude)
        let lat: CLLocationDegrees = center.latitude
        let long: CLLocationDegrees = center.longitude
        self.pointAnnotation1 = MKPointAnnotation()
        self.pointAnnotation1.title = "Event"
        self.pointAnnotation1.coordinate = CLLocationCoordinate2D(latitude: lat, longitude: long)
        self.pinAnnotationView = MKPinAnnotationView(annotation: self.pointAnnotation1, reuseIdentifier: nil)
        self.mapView?.centerCoordinate = self.pointAnnotation1.coordinate
        self.mapView.addAnnotation(self.pinAnnotationView.annotation!)
        CLLocation *center = [[CLLocation alloc] initWithLatitude:latt longitude:longg]
        eventRecord.setObject(center, forKey: "event")
        let publicData = CKContainer.defaultContainer().publicCloudDatabase
        publicData.saveRecord(eventRecord) { record, error in
        }
        if error == …注意:这不是一个重复的问题,我已经看过其他解决方案,但没有一个在Swift 3中工作,但他们在Swift 2中工作.
我需要使用UIImagePickerController从照片库中获取图像,这样工作正常,然后我需要做的是以某种方式将其保存到CloudKit中的公共记录,我对如何完成这一操作非常开放.如果可能的话,请明确我需要更改/添加什么以及在哪里.
我提供了我的整个视图控制器文件以确保.
导入UIKit导入CloudKit
var email:String =""
class ViewController:UIViewController,UITextFieldDelegate,UIImagePickerControllerDelegate,UINavigationControllerDelegate {
//MARK: Properties
@IBOutlet weak var firstNameField: UITextField!
@IBOutlet weak var lastNameField: UITextField!
@IBOutlet weak var emailField: UITextField!
@IBOutlet weak var passwordField: UITextField!
@IBOutlet weak var confirmPasswordField: UITextField!
@IBOutlet weak var notMatching: UILabel!
@IBOutlet weak var emailLabel: UILabel!
@IBOutlet weak var errorLabel: UILabel!
@IBOutlet weak var photoImageView: UIImageView!
override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    self.firstNameField.autocorrectionType = .no …我在WWDC 2016上观看了CloudKit的新功能,了解如何使用CKShare与其他用户共享记录
单记录共享:
我能够共享和检索单个记录
即如果xyz@gmail.com创建并共享一条记录到abc@gmail.com
多条记录共享:
假设有10条记录,xyz @ gmail.com想要分享到 abc@gmail.com.我面临的问题,当用户xyz@gmail.com股份多个记录用户abc@gmail.com
到目前为止我尝试了什么:
首先,我创建了3个音符记录:
注1
注2(将父设为Note1)
注3(将父设为Note1)
我用下面的代码分享了Note1(父记录):
代码 - 共享记录
let controller = UICloudSharingController { controller,
        preparationCompletionHandler in
        let share = CKShare(rootRecord: self.parentRecord!)
        share[CKShareTitleKey] = "note" as CKRecordValue
        share.publicPermission = .readOnly
        let operation = CKModifyRecordsOperation(
              recordsToSave: [self.parentRecord!, share],
              recordIDsToDelete: nil)
        operation.perRecordCompletionBlock = { (record, error) in
            if let error = error {
                print("CloudKit error: \(error.localizedDescription)")
            } …