ios - 关闭模态视图 Controller 后 TableView 数据加载多次

标签 ios swift parse-platform

我有一个显示来自 Parse 的对象的 TableView 。我有一个按钮,它以模态方式呈现另一个用于添加新对象的 View Controller 。当表格 View 中的一行被选中时,它会以模态方式呈现一个 View Controller 来显示对象信息并允许编辑对象。我遇到的问题是,当我添加一个新项目或编辑一个项目然后关闭模态 Controller 时,表格 View 会重新加载并多次显示数据。我做错了什么?

这些函数在呈现 View Controller (我的 TableView Controller )中。显然问题必须在 didDismissViewController() 中。

func getItems() {
        // activityIndicator?.startAnimating()

        let query = PFQuery(className: "Items")
        query.whereKey("user", equalTo: PFUser.currentUser()!)
        query.whereKey("collection", equalTo: self.title!)
        query.orderByAscending("item")
        query.limit = limit
        query.skip = skip
        query.findObjectsInBackgroundWithBlock( {
            (objects, error) -> Void in
            if error == nil {
                if let objects = objects as [PFObject]! {
                    for object in objects {
                        self.itemNames.append(object["item"] as! String)
                        self.objectID.append(object.objectId!)
                        self.itemUPC.append(object["upc"] as! String)
                        self.model.append(object["model"] as! String)
                        self.pricePaid.append(object["pricePaid"] as! String)
                        // self.imagesArray.append(object["images"])
                        if object["images"] == nil {
                            self.imagesArray.append(nil)
                        } else {
                            self.imagesArray.append(object["images"])
                        }
                    }
                }
                // print(self.imagesArray)

                /*
                if objects!.count == self.limit {
                self.skip += self.limit
                self.getCollections()
                }
                */

                dispatch_async(dispatch_get_main_queue()) {
                    self.tableView.reloadData()
                    // self.activityIndicator!.stopAnimating()
                    print(self.itemNames)
                }
            } else {
                var errorString = String()
                if let message = error!.userInfo["error"] {
                    errorString = message as! String
                }

                print(errorString)
            }
        })
    }

    func createItem() {
        let createVC = CreateItemViewController(nibName: "CreateItemViewController", bundle: nil)
        let navController = NavController(rootViewController: createVC)
        navController.modalPresentationStyle = .OverCurrentContext
        createVC.collectionString = self.title!
        NSNotificationCenter.defaultCenter().addObserver(self, selector: "didDismissViewController", name: "ItemAdded", object: nil)
        self.presentViewController(navController, animated: true, completion: nil)
    }

    func didDismissViewController() {
        objectID.removeAll()
        itemNames.removeAll()
        itemUPC.removeAll()
        pricePaid.removeAll()
        model.removeAll()
        imagesArray.removeAll()
        itemImages.removeAll()
        getItems()
    }

此函数位于以模式呈现的 View Controller 中,您可以在其中输入要创建的 Parse 对象的项目详细信息。

func done() {
        // Save the item data...

        if itemImageView.image != nil {
            let pictureData = UIImageJPEGRepresentation(itemImageView.image!, 0.05)
            image = PFFile(name: "img", data: pictureData!)
        } else {
            image = nil
        }

        let newItem = PFObject(className: "Items")
        newItem["item"] = itemNameTextField.text
        newItem["upc"] = upcTextField.text
        newItem["model"] = modelTextField.text
        newItem["pricePaid"] = pricePaidTextField.text
        newItem["user"] = PFUser.currentUser()
        newItem["collection"] = collectionString
        newItem["images"] = itemImages 

        newItem.saveInBackgroundWithBlock( {
            (succeeded, error) -> Void in
            if error == nil {
                NSNotificationCenter.defaultCenter().postNotificationName("ItemAdded", object: nil, userInfo: nil)
                self.presentingViewController?.dismissViewControllerAnimated(true, completion: nil)
            } else {
                var alert: UIAlertController?
                let errorOK = UIAlertAction(title: "OK", style: .Default, handler: {
                    (action) -> Void in
                    alert?.dismissViewControllerAnimated(true, completion: nil)
                })
                var errorString = String()
                if let message = error!.userInfo["error"] {
                    errorString = message as! String
                }
                alert = UIAlertController(title: "Error", message: errorString, preferredStyle: .Alert)
                alert!.addAction(errorOK)
                self.presentViewController(alert!, animated: true, completion: nil)
            }
        })
    }

最佳答案

看来您正在添加您的观察者,而不是删除它们。

关于ios - 关闭模态视图 Controller 后 TableView 数据加载多次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34821853/

相关文章:

ios - 弧内存泄漏和名为iOS的UIImage

ios - 如何从 GameScene 中的 ViewController 调用方法

ios - 如何从 IOS Swift 3 的饼图部分中删除文本?

android - 每天使用 Parse.com 发送推送通知

ios - 在核心数据中,建立一对一的关系是一个好的实践吗?

ios - 核心数据在swift ios中再次运行应用程序后显示故障记录?

arrays - 排序数组和查找更改 - Swift

swift - 如何创建像 Instagram 标签搜索一样的 CollectionView 标题?

ios - Facebook(4.6)/Parse(1.9.1) 登录不工作

java - Android 上的 ParseImageView 不显示图像