0

我有一个使用 Parse 作为后端编写的 iOS 应用程序。

用户可以在系统中存储项目。一个项目有一张或多张与之关联的图片。默认情况下,用户的项目和图片只能由该用户访问。用户可以为项目生成警报。当项目具有警报时,将授予对该项目及其图片的公共读取访问权限。当警报到期时,我想撤销这些对象的公共读取访问权限。

目前,我在创建警报时通过 iOS 客户端添加公共访问权限。因为警报可能会过期或被用户关闭,所以我试图在处理程序中after_save处理 Parse 的云代码中的另一半代码。

我目前正在尝试以下方法:

if (alert.get("isActive") === false) {
    // This alert has been rendered inactive, so make sure all photos are not publically readable
    var photos = alert.get("photos");
    if (photos !== undefined && photos.length > 0) {
        for (var i = 0; i < photos.length; i = i + 1) {
            var photo = photos[i];
            photo.fetch().then(function () {                                
                var photoACL = photo.getACL();
                photoACL.setPublicReadAccess(false);
                photo.setACL(photoACL);
                photo.save();
            });                         
        }
    }
}

警报有一个名为“照片”的数组。这些中的每一个都应该是指向具有 parseClassName“照片”的对象的指针。

当我查看控制台日志时,我看到了针对传入警报报告的预期数据。我看到了警报及其属性等。具体来说,“照片”数组看起来就像我认为的那样。

但是,有问题的是,我似乎无法弄清楚如何操作该数组。我不断收到的错误是我无法调用setPublicReadAccess. undefined太好了,这意味着那photoACLundefined,但是为什么呢?alert.photos数组中的项目是ParseObject实例。那应该不行.fetch()吧?

此外,当我尝试将对象本身记录到控制台(使用console.log(JSON.stringify(photo)))时,我得到奇怪的不一致结果。有时我只是得到{"objectId":"whatever"},但有时我会看到包含所有属性的整个对象。

4

1 回答 1

1

Fetch 将获取的对象传递给回调,它不会将其分配给原始的“照片”变量:

photo.fetch().then(function (photo) {
    // "photo" now refers to the fetched object
});

我认为这应该可以解决您遇到的未定义问题。

于 2014-10-26T06:17:44.527 回答