2014-10-24 1 views
0

У меня есть приложение iOS, которое я написал с использованием Parse в качестве бэкэнд.Parse.com: удалить общедоступный доступ для чтения для массива объектов

Пользователь может хранить предметы в системе. Элемент имеет одну или несколько снимков, связанных с ним. По умолчанию элементы и изображения пользователя доступны только этому пользователю. Пользователь может генерировать предупреждение для элемента. Когда элемент имеет предупреждение, предоставляется доступ к общедоступному доступу к элементу и его изображениям. Когда истекает срок действия предупреждения, я хочу отменить открытый доступ для чтения для этих объектов.

В настоящее время я добавляю общий доступ через клиента iOS, когда создается предупреждение. Поскольку предупреждение может истекать или быть отключенным пользователем, я пытаюсь обработать вторую половину кода в Cloud Code от Parse в обработчике 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(); 
      });       
     } 
    } 
} 

Предупреждение имеет массив с именем «фотографии». Каждый из них должен быть указателем на объект с parseClassName «фото».

Когда я смотрю на свой консольный журнал, я вижу ожидаемые данные для того, что сообщается для входящего оповещения. Я вижу предупреждение и его свойства и т. Д. В частности, массив «фотографий» выглядит так, как я полагаю.

Проблемно, однако, я не могу понять, как манипулировать этим массивом. Ошибка, которую я получаю, заключается в том, что я не могу позвонить setPublicReadAccess по телефону undefined. Отлично, значит, photoACL - undefined, но ПОЧЕМУ? Элементы массива alert.photos: ParseObject экземпляров. Должно ли не .fetch() работать, то?

Кроме того, когда я пытаюсь самостоятельно регистрировать объекты на консоли (используя console.log(JSON.stringify(photo))), я получаю странно непоследовательные результаты. Иногда я просто получаю {"objectId":"whatever"}, но иногда я вижу весь объект со всеми его включенными свойствами.

ответ

1

Fetch передает сгружен объект обратного вызова, он не присваивает его оригинальное «фото» переменный:

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

Я думаю, что должно решить неопределенную проблему с которой вы столкнулись.

+0

Когда я прочитал ваш ответ, я был уверен, что вы ошибались! Я думал, что элемент был неявно заполнен результатами из-за вызова «извлечения», но я ошибся, и вы были правы! Благодаря! – mbm29414

Смежные вопросы