【问题标题】:Updating object in Parse iOS, [Error]: Object not found在 Parse iOS 中更新对象,[错误]:找不到对象
【发布时间】:2016-08-06 00:57:51
【问题描述】:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    // Override point for customization after application launch.

    // Set up the Parse SDK
    let configuration = ParseClientConfiguration {
        $0.applicationId = "WhatsTheHW"
        $0.server = "https://whatsthehw-parse-alan.herokuapp.com/parse"
    }
    Parse.initializeWithConfiguration(configuration)

    let query = PFQuery(className: "Course")

    query.findObjectsInBackgroundWithBlock {(result: [PFObject]?, error: NSError?) -> Void in
        for object in result! {
            // existing objectIds: 1Ja2Hx77zA, 34AF1vKO6f, 5FWlsswxw0
            if object.objectId == "34AF1vKO6f" {
                object["studentRelation"] = ["hi", "ih"]
                object.saveInBackgroundWithBlock{(success, error) in
                    if success == true {
                        print("\(object) saved to parse")
                    } else {
                        print("save failed: \(error)")
                    }
                }
            }
        }
    }

    return true
}

这是我可以将此任务减少到的最低限度(此代码位于 AppDelegate)。

当我尝试在解析仪表板中使用 REST api 和 api 控制台时一切正常,但它不适用于 iOS sdk。

我从打印语句中得到的错误是

Error Domain=Parse Code=101 "Object not found." UserInfo={code=101, temporary=0, error=Object not found., NSLocalizedDescription=Object not found.}

如果我只是像这样添加一个新对象,它就可以工作:

let object = PFObject(className: "Course")
object["name"] = "German"
object["studentRelation"] = ["a", "b"]

object.saveInBackgroundWithBlock{(success, error) in
    if success == true {
        print("save completed")
        print("\(object) saved to parse")
    } else {
        print("save failed: \(error)")
    }
}

我真的很迷茫,我不知道为什么会这样。

提前致谢。

【问题讨论】:

  • Parse 将于 2017 年 1 月 28 日停产。我建议你以这个错误为起点,如果你愿意的话,强迫你的手移到另一个 BaaS。
  • 嗨@TheValyreanGroup。 parse.com 将是 EOL 但不是 parse-server :) 并且 Alan 使用的是 parse-server 而不是 parse.com。 parse-server 是 parse.com 团队发布的开源平台。你可以在这里阅读:github.com/ParsePlatform/parse-server

标签: ios swift parse-platform


【解决方案1】:

此问题可能与您尝试保存的对象的访问权限 (ACL) 有关。 [Error]: Object not found 是在没有write 访问对象的用户尝试保存它时打印的,Parse SDK 的错误消息在这里真的是误导!

确保尝试保存对象的解析用户具有正确的写入,以在您的解析数据库中实际写入该对象。

一个简单的解决方法是将应用内的默认ACL 设置为public read + write

let acl = PFACL()
acl.publicReadAccess = true
acl.publicWriteAccess = true
PFACL.setDefaultACL(acl, withAccessForCurrentUser: true)

但请注意这种方法,通常您希望根据用户的实际角色设置访问权限。因此,更好的选择是仅在创建 PFObject 时设置 ACL,并且仅授予 write 访问您知道应该能够更改对象的用户。

【讨论】:

    【解决方案2】:

    您能否先找到您的对象,保存到另一个对象并在循环之外运行 saveInBackground。

    您的代码应如下所示:

        var objectToSave : PFObject?
    
        let query = PFQuery(className: "Course")
        query.findObjectsInBackgroundWithBlock {(result: [PFObject]?, error: NSError?) -> Void in
            for object in result! {
                if object.objectId == "jMIxdSXNRH" {
                    objectToSave = object
                }
            }
    
    
            if objectToSave != nil {
                objectToSave!["studentRelation"] = ["hi", "ih"]
                objectToSave!.saveInBackgroundWithBlock{(success, error) in
                    if success == true {
                        print("\(objectToSave) saved to parse")
                    } else {
                        print("save failed: \(error)")
                    }
                }
            }
    
        }
    

    我使用的是我的 objectId 而不是你的,所以请将它们更改为你的 :)

    【讨论】:

    • 我已经尝试过你的建议,但仍然返回相同的错误
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    • 2015-06-02
    • 1970-01-01
    相关资源
    最近更新 更多