2016-03-26 6 views
10

CloudKitデータベースにperformQueryの代わりにCKQueryOperationを使用しようとしています。デバイスがオフラインのとき、私はエラーを取得していない午前CKQueryOperationを使用しているとき、私はここでperformQueryデバイスのオフライン時にCKQueryOperationがエラーを返さない

を使用しないとき

どちらの作品は、私のperformQueryの例では、データベースは、私のCKDatabase

むき出しの骨です
database.performQuery(q, inZoneWithID: nil) { (records:[CKRecord]?, error:NSError?) in 
    if error != nil { 
     print(error!.localizedDescription) 
     return 
    } 
} 

デバイスがオフラインのときにエラーが表示され、ユーザーに確認を求めることができます。私は予想通り、それが働いているので、私は両方の方法のための私のデータを受信し、接続してCKQueryOperation

let p = NSPredicate(format:"recordID IN %@", student.courses) 
let q = CKQuery(recordType: String(Course), predicate: p) 

let queryOperation = CKQueryOperation(query: q) 

queryOperation.recordFetchedBlock = { record in 
    // not called without network connection - doesn't enter scope 
    print(record) 
} 


queryOperation.queryCompletionBlock = { (cursor: CKQueryCursor?, error: NSError?) in 
    // not called without network connection - doesn't enter scope 
    print(cursor) 
    print(error) 
} 

database.addOperation(queryOperation) 

を使用するときにエラーが、私はエラーを取得していない、しかし

The internet connection appears to be offline

です。

CKQueryOperationを使用するとどのようにエラーが発生するのですか?

おかげ

答えて

8

私は恵みを投稿し、次の1時間または2ない私はもともとthisを逃したが、それは私が探していた答えを含ん方法がわから以内に答えを見つけることが通常通り。

だから、このラインにシーンの変化の背後にある

queryOperation.qualityOfService = .UserInitiated 

何かを追加することによって、我々はこのいずれかを示唆するためにAppleのドキュメントには何も見つかりませんでした

queryOperation.queryCompletionBlock = { (cursor: CKQueryCursor?, error: NSError?) in 
    // We get an error message... Finally !! 
    print(error) 
} 

内のいくつかの素晴らしいアクションを持っています。

+0

私はまた、 'timeoutIntervalForResource'のデフォルト値は7日であることがわかりました。だから、愚かに聞こえても、リクエストをあきらめてから1週間かかることがあります。私はそれを6秒に変更し、 –

関連する問題