2016-07-20 2 views
0

私は、繰り返し処理してコアデータエンティティを検索/挿入するために必要なオブジェクトの配列を持っています。私は、albumParentFoldersをどのようにしてダイブして、存在しているかどうか、エンティティアルバムに追加しないかどうかを見極めることはできません。階層的なフォルダスタイルデータをインポートする方法

私は、albumParentFoldersをドリルダウンする再帰的な方法だと知っていますが、私のAlbumObjectがどのように構造化されているかによって、実際の解決策を見つけることができません。

ので、オブジェクトの私の配列をインポートするためには、私が最初に検索コアデータに必要とコアデータのエンティティにalbumFolderName挿入を発見していない場合はアルバムと呼ばれるこの

NSArray AlbumObjects 
--------------------------------------- 
NSString * albumFolderName 
NSString * albumDetailsTitle 
NSString * albumDetailsURL 
NSArray * albumParentFolders (Array of (NSStrings *) of albumFolderNames used for the level in the tree this album lives in. Can be nil for a root folder) 

のようなものです。次に、アルバムエンティティに自動生成されたクラスを使用して、そのフォルダの新しい詳細オブジェクトを挿入します。例えば[newFolder addDetailsObject:newDetails]また、albumFolderNameは複数回表示される可能性があるため、異なる親フォルダにあるため、albumFolderNameはコアデータ内で一意ではありません。

Entity: albums 
------------------------------------- 
Attribute: folderName 
------------------------------------- 
Relationship: albumDetails <------>> Entity : details (For adding multiple albumDetailsTitle and albumDetailsURL) 
Relationship: parent  <<------- 
Relationship: subGroups   | 
        ^   | 
        ------------ 

最終的にアルバムフォルダはNSOutlineViewとIBバインディングを使用してツリービューに表示されます。この部分はすでに動作しています。

AlbumObjectを繰り返し処理する方法、具体的にはalbumParentFoldersをドリルしてフォルダ構造全体をエンティティに格納できるように助言できる人は、私は大変感謝しています。

SDKは、ツリーをたどると、不足している枝を作成し、ルートにOSX 10.7以降

+0

は 'albumParentFolders'フルパスですか? AlbumFolderNamesは一意ではなく、見つからない場合にのみ挿入します。 – Willeke

+0

albumParentFoldersはnilまたは[0] = @ "General" [1] = @ "July 2016" [2] = @ "Keep" albumFolderNameは@そのような場合のように見えるフルパスです。 albumFolderNameはnilでもかまいません。フォルダがないため、ルートの詳細項目がないことを示します。 次の配列オブジェクトは、[0] = @ "New Import" [1] = @ "July 2016" [2] = @ "Keep"なので、それが存在するかどうかを検証するために親の親の親を見つける必要があります。私はこれが再び再帰的な部分であると推測することはできません。 – GeoffCoope

答えて

2

スタートをサポートする必要があります。

擬似コード:

album = root 
if (albumParentFolders != nil) { 
    parentAlbum = root 
    for (folder in albumParentFolders) { 
     album = find folder in parentAlbum.subGroups 
     if (album not found) { 
      album = insert new album 
      album.folderName = folder 
      album.parent = parentAlbum 
     } 
     parentAlbum = album 
    } 
} 
add details to album 
+0

ありがとうございます。あなたの例は、私が正しい道で私を得るために必要なものでした:D私は今それを働かせています。 – GeoffCoope

+0

あまりにもうまくいくと思いました。私はまだ問題があります。例えば、アルバムとフォルダを持つ詳細(ABC/July/Keep)をインポートして、フォルダ(DEF/July/Keep)を使って別のアルバムセットをインポートすると、 7月および/ ABCフォルダに保管してください。私はそれが起こることを望んでいない、私はすべてのインポート時に新しいフォルダを作成し、すべての新しいアルバムがそこに入ることを望む。何か案は? – GeoffCoope

+1

'parentAlbumのサブグループ内のフォルダを見つける 'はfetchRequestではありません。 'parentAlbum.subGroups'の' folder'を検索します。私は私の答えを更新しました。 ABCとDEFのサブグループはrootか、すべてのインポート時に新しいルートを作成しますか? – Willeke

関連する問題