2015-08-24 4 views
0

Я посмотрел на все, но я не могу найти ответ на этот вопрос.Отношения во многих отношениях Парсе

Я сохраняю подкасты и связанные с ними эпизоды в Parse, но следующий код сохраняет только один эпизод и подкаст (я полагаю, что каждая запись, найденная в цикле for, сбрасывает currentP, и сохраняется только последнее найденное значение).

let currentP = PFObject(className: self.podcastClass) 
    currentP["user"] = PFUser.currentUser() 
    currentP["name"] = name 
    currentP["artist"] = artist 
    currentP["summary"] = summary 
    currentP["feedURL"] = feedURL 
    currentP["artworkURL"] = artworkURL 
    currentP["artwork"] = artwork 
    currentP["date"] = date 

let episodesToParse = PFObject(className: self.episodesClass) 
    for episode in episodes { 
    episodesToParse["showDate"] = episode.date 
    episodesToParse["title"] = episode.title   
    episodesToParse["downloadURL"] = episode.enclosures[0].valueForKey("url") as? String 
    episodesToParse["showNotes"] = episode.summary 
    episodesToParse["localPath"] = "" 
    episodesToParse["isDownloaded"] = "no" 
    episodesToParse["parent"] = currentP 
} 
episodesToParse.saveInBackground() 

Если я использую что-то вроде episodesToParse.addObject(episode.date, forKey: "showDate") то возвращается следующее сообщение об ошибке:

[Error]: invalid type for key showDate, expected date, but got array (Code: 111, Version: 1.8.1)

Я не уверен, как поступить. Я хочу, чтобы currentP сохранялся как есть, и все его эпизоды сохранялись в другом классе с отношением к его родительскому (Podcast). Я нашел множество способов сделать это, если вы добавляете один эпизод за раз, но не целую кучу (я хотел бы иметь возможность сохранить 500 экземпляров episodesToParse сразу.

Спасибо за вашу помощь. .

+0

Что значит быть спасенным в другом классе? Вы действительно хотите, чтобы каждый эпизод был в своем классе? – Christian

+0

Нет, я хочу, чтобы все эпизоды вошли в один класс. Каждый эпизод должен быть другой строкой и относиться к ее родителю подкаста – user2747220

+0

Я обновил свой ответ. Вы можете использовать PFObject.saveAllInBackground – Christian

ответ

2

Ваша проблема в том, что вы сохраните episodesToParse после цикла вы должны переместить episodesToParse.saveInBackground() внутри цикла так, чтобы каждый цикл устанавливает свойство эпизода эпизод обновляется:

for episode in episodes { 
    episodesToParse["showDate"] = episode.date 
    episodesToParse["title"] = episode.title   
    episodesToParse["downloadURL"] = episode.enclosures[0].valueForKey("url") as? String 
    episodesToParse["showNotes"] = episode.summary 
    episodesToParse["localPath"] = "" 
    episodesToParse["isDownloaded"] = "no" 
    episodesToParse["parent"] = currentP 

    //Inside 
    episodesToParse.saveInBackground() 
} 

Или вы можете использовать PFObject.saveAllInBackground для сохранения всех объектов:

var episodesToSave[PFObject] = [] 

for episode in episodes { 
    var episodeToParse 
    episodeToParse["showDate"] = episode.date 
    episodeToParse["title"] = episode.title   
    episodeToParse["downloadURL"] = episode.enclosures[0].valueForKey("url") as? String 
    episodeToParse["showNotes"] = episode.summary 
    episodeToParse["localPath"] = "" 
    episodeToParse["isDownloaded"] = "no" 
    episodeToParse["parent"] = currentP 

    //Add to episode-array 
    episodesToSave.append(episodesToParse) 
} 

//Save all objects in the array 
PFObject.saveAllInBackground(episodesToSave) 
+0

Я сделал это, но в случае, если подкаст имеет 500 записей, он будет звонить в сеть и сохранять 500 раз. Звучит неэффективно – user2747220

+0

Ваше второе решение работает, спасибо. Мне пришлось изменить 'var episodeToParse', чтобы' let episodeToparse = PFObject (classeName: «Episodes») ' – user2747220

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