私はコーディングの分野ではかなり新しいですし、FirebaseでtableViewを実装しようとしています。ユーザーから特定のオプションを選択するために、ユーザーが(私はここユーレカを使用)、フォームを入力自分の好きな場所 Firebase + Swift:tableView内の行を削除できません
- :私は何を達成しようとしていることにあります設定ページでは、彼らが入力
- フォームが動作するためには、これらの「お気に入り」
の削除を許可お気に入りは、私がuser.uidによってフィルタリングAppDelegateでFirebaseデータを引き出します。それらの「お気に入り設定」を設定します。 「設定」でcommitEdittingStyleを使用して行を削除しようとすると、無効な行数のエラーがスローされます。私はさまざまなソリューションを試みて、ディスパッチ_アシンクを試してみましたが、どういうわけか、私の問題をかなり解決していません。私のコードのいくつかのスニペットは、次のように:「無効なアップデート:の無効 数
public var setUpFavLocations: [(String)] = []
public var favLocDatabase: [FIRDataSnapshot]! = []
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
var ref: FIRDatabaseReference!
var _refHandle: FIRDatabaseHandle!
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
FIRApp.configure()
let favLocVC: UITableViewController = FavLocationsTableViewController(style: UITableViewStyle.Plain)
ref = FIRDatabase.database().reference()
if let user = FIRAuth.auth()?.currentUser {
self.ref.child("settings").queryOrderedByChild("user").queryEqualToValue(user.uid).observeEventType(.ChildAdded, withBlock: { (snapshot) in
favLocDatabase.append(snapshot)
let insertionIndexPath = NSIndexPath(forRow: favLocDatabase.count - 1, inSection: 0)
favLocVC.tableView.insertRowsAtIndexPaths([insertionIndexPath], withRowAnimation: .Automatic)
})
self.ref.child("settings").queryOrderedByChild("user").queryEqualToValue(user.uid).observeEventType(.ChildAdded, withBlock: { (snapshot) in
setUpFavLocations.append(snapshot.value?["favLocation"] as! String)
})
//At FavLocationsTableViewController, aka at the settings page
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
print("count \(setUpFavLocations.count)")
return setUpFavLocations.count
}
override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if editingStyle == .Delete {
if let user = FIRAuth.auth()?.currentUser {
let row = favLocDatabase[indexPath.row]
self.ref.child("settings").queryOrderedByChild("user").queryEqualToValue(user.uid).observeEventType(.ChildRemoved, withBlock: { (snapshot) -> Void in
favLocDatabase.removeAtIndex(indexPath.row)
self.tableView.deleteRowsAtIndexPaths([NSIndexPath(forRow: indexPath.row, inSection: 0)], withRowAnimation: .Automatic)
})
row.ref.removeValue()
}
}
}
はこれが原因、理由キャッチされない例外
「NSInternalInconsistencyException」に私のアプリを終了、次のエラー
をスロー行いますupdate(5)後の既存のセクションの に含まれる行数は、更新(5)前にそのセクションに含まれている 行の数にプラスまたはマイナス の行数が挿入されている必要がありますまたはd (0が挿入され、035が挿入され、 が削除されました)、またはそのセクション(0が移動された、0が移動された)の内外に移動された行の数をプラスまたはマイナスします。
Plsが役に立ったとても有難い。
お待ちください、あなたはユーレカを使用しているとは思わない?ユーレカもここで使ってみませんか?それはずっと簡単です! – Sweeper
@ Sweeper私はこの目的に最も適したユーレカのセルを見つけることができません。 – Koh
データベースから項目を2回削除することができますか( 'removeAtIndex'と' removeValue')?なぜ、パラメータに渡された(実際には同じ)パスを使用するのではなく、新しいインデックスパスを作成するのですか? – vadian