SourceKitService が予期しない理由で終了しました。というエラーの対処方法
こちらのサイトでも質問させていただき、ご回答をいただきましたが解決することができていない状況なので質問させていただきます。
https://teratail.com/questions/34121
前提・実現したいこと
swiftで日記アプリを作っています。
xcodeのバージョンは7.3.1、swiftは2.2です。
発生している問題・エラーメッセージ
xcodeでコードを書き始めると、作業にならないほど頻繁にSourceKitServiceが落ちてしまいます。また、入力中にxcodeのコードを書く部分のスクロールがずれてしまったり、補完機能が効かなくなったりと不安定です。
SourceKitService が予期しない理由で終了しました。
たまにswiftが終了しましたと出ることもあります。
swiftが予期しない理由で終了しました。
試したこと
調べたところ以下の方法があったので、試みましたが改善しませんでした。
rm -rf ~/Library/Developer/Xcode/DerivedData
~/Library/Developer/Xcode/DerivedData/ModuleCache
~/Library/Caches/com.apple.dt.Xcode
・xcodeの再起動
・macの再起動
また、一度以下のコマンドで補完機能を切ってから元に戻し、さらにDerivedDataを削除したところ、少しの間クラッシュしなくなったのですが、また数秒に一回くらいクラッシュする状態になってしまいました。
どのようにすれば、解決できますでしょうか。よろしくお願いします。
defaults write com.apple.dt.Xcode IDEIndexDisable 1
defaults write com.apple.dt.Xcode IDEIndexDisable 0
rm -rf ~/Library/Developer/Xcode/DerivedData
追記
いろいろと調べた結果、以下のニフティクラウドモバイルバックエンド(mBaaS)のデータストアからクエリでデータを取得する部分をコメントアウトしたところ、クラッシュしなくなりました。
しかし、どのように修正すればクラッシュしなくなるのかがわかりません。何かお分かりになられたら教えてください。よろしくお願いします。
let query = NCMBUser.query()
query.whereKey("userName", equalTo: user[0].uuid)
//soucekitのクラッシュの原因はここ!!ここが原因なのは確かなので、さらに詳しくチェックしていく!!
/* query.findObjectsInBackgroundWithBlock({ (objects, error) in
if error == nil{
objects[0].setObject(self.userNameTextField.text, forKey: "ownerName")
objects[0].setObject(self.userSelectWork, forKey: "works")
objects[0].setObject(self.userSelectWorksYear, forKey: "worksYear")
objects[0].setObject(self.myGoalTextView.text, forKey: "myGoal")
if self.pickedPhoto != nil{
objects[0].setObject(self.targetFile?.name, forKey: "userPhotoName")
}
objects[0].save(&saveError)
let realm = try!Realm()
let user = User()
user.id = 1
user.userName = self.userNameTextField.text
user.works = self.userSelectWork
user.worksYear = self.userSelectWorksYear!
user.myGoal = self.myGoalTextView.text
try!realm.write({
})
print("ひ")
let fileName = NSUUID().UUIDString + ".jpg"
let filePath = (self.path! as NSString).stringByAppendingPathComponent(fileName)
if self.photo?.writeToFile(filePath, atomically: true) == false{
self.errorMessage()
}else{
print("写真をファイルに保存成功")
}
//写真があるならば
if self.targetFile != nil{
//更新するデータの写真と比べて、同じものではないならば
if self.targetFile?.name != objects[0]["userPhotoName"] as! String{
self.targetFile?.saveInBackgroundWithBlock({ (error:NSError!) in
if error == nil{
self.navigationController?.popToRootViewControllerAnimated(true)
}else{
self.errorMessage()
}
}, progressBlock: { (percentDone) in
})
}
}else{
//写真がないなら
self.navigationController?.popToRootViewControllerAnimated(true)
}
}else{
//エラー処理
self.errorMessage()
}
})*/