私は Couchbase と Swift のまったくの初心者であり、現在取り組んでいる新しいアプリの候補アーキテクチャを立ち上げて実行しようとしています。クラッシュせずに動作させることができないという事実を除けば、Couchbase はぴったりだと思います。これにはいくつかの理由があるかもしれませんが、健全性をチェックするために、それが間違っているかどうかを知りたかっただけです。
次のマッピング関数では、emit 関数が呼び出されるたびに EXC_BAD_ACCESS エラーが発生します。関数は、起動時にView Controllerから呼び出されています。デバッガーでパラメーターを確認しましたが、それらはメモリ内の有効な参照を指しています。クエリを作成する関数は次のとおりです。
class func listEvents() -> CBLQuery? {
if let view:CBLView = DatabaseService.sharedInstance.database.viewNamed("events") {
if !view.mapBlock { //create the map block if it doesn't exist
func mapBlock(doc: [NSObject: AnyObject]!, emit: ((key: AnyObject, value: AnyObject!) -> ())?) {
if let type:AnyObject = doc["type"] {
if type.isKindOfClass(NSString.self) && (type as String) == Event.docType() {
if let key: AnyObject = doc["date"] {
if let emitFunc = emit {
emitFunc(key: key, value: doc)
}
}
}
}
}
view.setMapBlock(mapBlock,
reduceBlock: nil,
version: "1")
}
return view.createQuery()
}
return nil
}
また、Objective-C で関数全体を書き直そうとしましたが、うまくいきました。誰も助けてくれない場合は、これを Swift のバグに置きます。もしそうなら、Apple に問題を報告したいのですが、Couchbase Mobile SDK と Swift がどのように機能するかについての私の理解はまだかなり限られています。Couchbase Lite を Swift で動作させることに成功した人がいる場合は、私を助けていただければ幸いです。または、Github に Swift で記述されたサンプル プロジェクトがあれば、現時点ではそれが私の宝です。