Быстрое чтение CloudKit без входа в iCloud

Таким образом, я могу читать информацию из своей базы данных, когда (в симуляторе) я вошел в свой iCloud, однако все, у кого есть мое приложение, (очевидно) не будут. Когда я пытаюсь получить доступ к базе данных, когда я не вошел в систему, появляется это сообщение об ошибке:

<CKError 0x7fc1e3416510: "Request Rate Limited" (7/2008); "This operation has been rate limited"; Retry after 3.0 seconds> 

с последующим:

Error Domain=NSCocoaErrorDomain Code=4097 "The operation couldn’t be completed. (Cocoa error 4097.)" (connection to service named com.apple.cloudd) UserInfo=0x7fc1e352f800 {NSDebugDescription=connection to service named com.apple.cloudd}

Код:

//VARIABLES********************************************************

@IBOutlet var questions: UILabel!
var resultsOfDB : String = ""
var indexes : [Int] = []
var counter : Int = 0
var newStr : String = ""
//*****************************************************************

@IBAction func getNewQbutton(sender: AnyObject) {

    let container = CKContainer.defaultContainer()
    var publicDB = container.publicCloudDatabase


    let myQuery = CKQuery(recordType: "QuestionsTable", predicate: NSPredicate(value: true))


    publicDB.performQuery(myQuery, inZoneWithID: nil){
        results, error in

        if error != nil {
            println(error)
        }

        else
        {

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

                self.resultsOfDB = results.description

                //for each character in resultsOfDB
                for character in self.resultsOfDB{

                    if(character == "\""){
                        self.indexes.append(self.counter)

                    }
                    self.counter++
                }


                self.newStr = self.resultsOfDB.substringWithRange(Range<String.Index>(start: advance(self.resultsOfDB.startIndex, self.indexes[0] + 1), end: advance(self.resultsOfDB.endIndex, -(self.counter - self.indexes[1]))))

                self.questions.text = self.newStr
            })
        }
    }

}

Кто-нибудь знает, как кто-то может читать в моей базе данных, когда они не вошли в мою учетную запись iCloud? Спасибо!


person CS8800    schedule 01.02.2015    source источник
comment
Пожалуйста, покажите нам свой код.   -  person Christian    schedule 02.02.2015
comment
Хорошо, я сделал! Я подумал / думаю, что это может быть проблема с настройкой, то есть я неправильно установил базу данных или что-то в этом роде, поэтому я не был уверен, нужен код или нет!   -  person CS8800    schedule 02.02.2015
comment
по умолчанию права чтения установлены для всех на recordType в вашей общедоступной базе данных. Пользователь не должен входить в систему, чтобы запросить эти записи. Им нужно войти в свою учетную запись iCloud, если они хотят записывать данные.   -  person Edwin Vermeer    schedule 04.02.2015


Ответы (2)


Общедоступная база данных доступна для чтения только без входа в систему в производственной среде, а не в среде разработки.

В документации Apple говорится:

В процессе разработки, когда вы запускаете свое приложение через Xcode на симуляторе или устройстве, вам необходимо ввести учетные данные iCloud для чтения записей в общедоступной базе данных. В производственной среде разрешения по умолчанию позволяют пользователям, не прошедшим проверку подлинности, читать записи в общедоступной базе данных, но не позволяют им писать записи.

См. Краткое руководство по использованию CloudKit.

person Yann Bodson    schedule 02.08.2016

Это ошибка симулятора (команда Apple, вероятно, исправит это в следующих обновлениях). Если ваш симулятор не вошел в iCloud, возникнет эта ошибка. Однако эта ошибка не возникнет на виртуальном устройстве, даже если на этом устройстве не выполнен вход в iCloud.

person JSNoob    schedule 14.07.2016