[swift]更新对象解析在 iOS 中,[错误]: 找不到对象

标签: ios Swift
发布时间: 2017/3/6 23:13:09
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.
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)。

它所有的工作罚款当我尝试使用其他 api 和 api 控制台中分析仪表板,但它不能与 iOS sdk。

我正在从 print 语句的错误是

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)")
    }
}

我真的迷路了,我不知道为什么会这样。

在此先感谢。

解决方法 1:

这一问题可能涉及访问权限( ACL ) 的对象,你想要保存。 [Error]: Object not found 打印时没有用户 write 对对象的访问尝试保存它,解析 SDK 的错误消息是真的误导在这里 !

请确保解析用户想要保存该对象在您解析 DB 实际上该对象的正确写入。

简单的解决办法是设置默认 ACL 里面您应用程序 public read + write :

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

要小心使用这种方法,虽然通常要设置访问权限的用户的实际作用。因此更好的选择就是只能设置 ACLPFObject 当你要创建它,只给 write 你知道用户的访问应该能够更改的对象。

赞助商