0

Parse をバックエンドとして使用して作成した iOS アプリがあります。

ユーザーはアイテムをシステムに保管できます。アイテムには、関連付けられた 1 つまたは複数の画像があります。デフォルトでは、ユーザーのアイテムと画像はそのユーザーのみがアクセスできます。ユーザーはアイテムのアラートを生成できます。アイテムにアラートがある場合、アイテムとその写真へのパブリック読み取りアクセスが与えられます。アラートの有効期限が切れたら、それらのオブジェクトのパブリック読み取りアクセスを取り消したいと考えています。

現在、アラートの作成時に iOS クライアントを介してパブリック アクセスを追加しています。アラートは期限切れになったり、ユーザーによってオフにされたりする可能性があるため、Parse の Cloud Code のコードの残りの半分をafter_saveハンドラーで処理しようとしています。

現在、次のことを試しています。

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();
            });                         
        }
    }
}

アラートには「photos」という名前の配列があります。これらはそれぞれ、parseClassName "photo" を持つオブジェクトへのポインターである必要があります。

コンソール ログを見ると、着信アラートについて報告された予想データが表示されます。アラートとそのプロパティなどが表示されます。具体的には、「写真」配列は、私が信じているように見えます。

問題は、しかし、私はその配列を操作する方法を理解できないようです。私が取得し続けるエラーは、 を呼び出すことができないというものsetPublicReadAccessですundefined。素晴らしい、それはそれが であることを意味しphotoACLますがundefined、なぜですか? 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 に答える