0

私は Objective-C から始めて、MusicCollection と Playlists で演習を行っています。MusicCollection には、他のプレイリストに含まれるすべての曲を含むマスター プレイリストがあります。音楽ライブラリにすぐに追加せずに、ユーザーがプレイリストを作成できるようにしたくありません。このように、ユーザーはプレイリストを作成してすぐに曲を追加するだけで、後で手動で追加することなくマスター ライブラリに反映されます。これが MusicCollection の私の init です。

- (id) initWithName: (NSString *)aName
{
    self = [super init];

    if(self)
    {
        name = aName;                             // name of MusicCollection
        collection = [NSMutableArray array];      // array of Playlist objects

        // Now I'm making a playlist which I want to be designated
        // as the master playlist.

        library = [[Playlist alloc] initWithName:@"Library"
                                 underCollection:self];
    }

    return self;
}

Playlist init メソッドで実行するロジックがよくわかりません。適切な MusicCollection がまだ作成されていない場合、ユーザーが Playlist オブジェクトを作成することを許可したくありません。ここに私が持っているものがあります:

- (id) initWithName: (NSString *)theName underCollection:(MusicCollection *)theMusic
{
    self = [super init];

    if(self)
    {
        name = theName;
        songs = [NSMutableArray array];

        if([theMusic.collection count] == 0)
        {
            NSLog(@"This is the master playlist");
            [theMusic.collection addObject:self];
        }
        else if([theMusic.collection count] != 0)
        {
            [theMusic.collection addObject:self];
             NSLog(@"Adding a regular playlist");
        }
    }
    return self;
}

これは私には危険に思えます。ユーザーは、Playlist で init メソッドを呼び出すだけで、適切に初期化されていない MusicCollection を使用してプレイリストを作成しようとすることができます。これを行うより良い方法はありますか?

4

2 に答える 2

2

クラスでオーバーライドできます-initPlaylist

- (id)init
{
    @throw [NSException exceptionWithName:NSInternalInconsistencyException reason:@"Use -initWithName:underCollection: instead" userInfo:nil];
}
于 2013-07-11T03:49:21.350 に答える
0

プレイリストの init メソッドをオーバーライドしてこれらのチェックを追加するか、init を使用してプレイリストを作成できないように例外をスローすることができます。

于 2013-07-11T03:49:23.627 に答える