2

Я работаю над базовым приложением (я привык работать с sqlite, но на этот раз я хотел узнать что-то новое), и я застрял на это отношение проблема:Основные данные: атрибуты во многих отношениях.

у меня есть песни и списки воспроизведения, и я хочу, чтобы связать их с порядковым номером, так что списки воспроизведения могут быть такими:

- "Playlist A" 
     1. Song A 
     2. Song C 
     3. Song B 
- "Playlist B" 
     1. Song C 
     2. Song A 
     3. Song B 
     4. Song F 
     5. Song E 

Это очевидно много-2-много случай, с (я знаю, что это не стандарт) номер заказа, хранящийся в связанной таблице; В SQL Server я сделаю

Table "Songs" (id, name, ecc..) 
    Table "Playlists" (id,name, ecc..) 
    Table "PlaylistSongs" (playlist_id,song_id,position) 

In Core Data i did: 
     Entity "Song" 
     Entity "Playlist" 
     Entity "SongInPlaylist" 

with this relation: 
    Song <---->> SongInPlaylist 
    Playlist <----->> SongInPlaylist 

Но теперь я не знаю, как:

а) поставить песню в плейлист на определенном индекс б) получить песни в список воспроизведения в правильном порядке гр) изменить порядок воспроизведения.

Может кто-нибудь мне помочь?

ответ

1

Кажется, что для SongInPlaylist нужен атрибут position. Затем вы можете дать PlayList некоторые методы для вставки в индекс, переместить их из одного индекса в другой или удалить с помощью индекса, который бы фиксировал значения позиции других объектов SongInPlaylist.

+0

На самом деле я забыл сказать, что я уже положил это. Что мне не хватает, так это то, как создать запись в SongInPlaylist, определяющую как песню, так и список воспроизведения – kappa

+0

. Я не уверен, как ответить на это, не зная ваш пользовательский интерфейс, но, в основном, ваш пользователь что-то делает, чтобы указать «поместите это песня в какой-то позиции в этом плейлисте ". В ответ вы создаете новый объект SongInPlaylist и заполняете три поля. (Я предполагаю, что у вас есть как объекты песни, так и плейлисты, потому что вы, вероятно, покажете их пользователю.) –

+0

Другое дело ... использование различных идентификаторов является нормальным для прямого программирования баз данных, но в Core Data вы 'напрямую использовать объекты (в случае, если вы считаете, что вам нужны фактические поля id в ваших объектах). –

0

Добавить элемент в середине, что-то вроде «PlaylistEntry», который указывает на песню и имеет поле для заказа. Создавайте свои списки воспроизведения из списка PlaylistEntries, а не непосредственно из песен. Затем вы можете отсортировать поле заказа и изменить его, чтобы изменить сортировку списка воспроизведения.

+0

Благодарим за ответ, комментарий, который я отправил в Philip Mills, также подходит для вашего ответа. – kappa

1
Song *song = yourSong; 
Playlist *playlist = yourPlaylist; 
NSNumber *position = songsPositionInPlaylist; 

// add song to playlist 
SongInPlaylist *sip = [NSEntityDescription insertNewObjectForEntityForName:@"SongInPlaylist" inManagedObjectContext:yourContext]; 
sip.song = yourSong; 
sip.playlist = yourPlaylist; 
sip.position = songsPositionInPlaylist; 

[yourContext save:nil]; 
+0

Это именно то, что я сделал после предложений Филлипа Миллса, спасибо вам в любом случае – kappa

0

Похоже, что это идеальное использование для упорядоченных отношений. Просто проверьте поле «Заказ» в редакторе модели данных, и каждый список воспроизведения будет содержать ссылки на свои песни в указанном вами порядке.

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