6

ユーザーが設定タブで曲を選択し、オンデマンドで別のビューで再生できるアプリを作成しています。ユーザーがアプリを閉じてもう一度開いた場合に、このアイテムを保存できるようにしたい.

ユーザーが曲を選択して保存できるようにしました:

-(IBAction)showMediaPicker:(id)sender{

    MPMediaPickerController *mediaPicker = [[MPMediaPickerController alloc] initWithMediaTypes: MPMediaTypeAny];

    mediaPicker.delegate = self;

    mediaPicker.allowsPickingMultipleItems = NO;

    mediaPicker.prompt = @"Select Alarm Sound";

    [self presentModalViewController:mediaPicker animated:YES];

}


- (void) mediaPicker: (MPMediaPickerController *) mediaPicker didPickMediaItems: (MPMediaItemCollection *) mediaItemCollection {

    [self dismissModalViewControllerAnimated: YES];

    settingsData.selectedSong = mediaItemCollection;//Object of type MPMediaItemCollection

しかし、ユーザーがアプリを使用するたびにこれを行う必要があります。

NSUserDefaults を使用してみました:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:settingsData.selectedSong forKey:@"alarmSoundKey"];
[defaults synchronize];

しかし、エラーが発生します:

* -[NSUserDefaults setObject:forKey:]: クラス「MPMediaItemCollection」の非プロパティ値「」を挿入しようとしています。プロパティ リスト内の辞書と配列にも、プロパティ値のみが含まれている必要があることに注意してください。

私のオプションは何ですか?これに対処する方法が本当にわかりません...

解決 -

自分の質問にはまだ答えられないので、ここに載せておきます。

私はこれに対する私自身の解決策を見つけました:

最初に MPMediaItemCollection を NSData オブジェクトに変換/エンコードし、次を使用して NSUserDefaults を使用してそれを保存します。

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:mediaItemCollection];

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:data forKey:@"someKey"];
[defaults synchronize];

そこから、アプリの他の場所でデコードして使用できます....

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *data = [defaults objectForKey:@"someKey"];
MPMediaItemCollection *mediaItemCollection = [NSKeyedUnarchiver unarchiveObjectWithData:data]

それが誰かの助けになることを願っています。言葉を広めてください、これは十分にカバーされていません. 文字通り、この問題に約 4 時間取り組んできました...

4

2 に答える 2

4

NSUserDefaultsにはプロパティリストの値のみを保存できます。MPMediaItemCollectionはNSCodingに準拠しているため、代わりにNSKeyedArchiverを使用して保存できます。

http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSKeyedArchiver_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40003672

次に、NSKeyedUnarchiverを使用して、後でファイルから読み戻します。

于 2011-11-23T22:13:47.483 に答える
2

プロパティを使用することもできMPMediaItemPropertyPersistentIDます。次にアプリケーションを起動したときに iPod ライブラリからアイテムを取得するためのクエリを作成し、ユーザーがライブラリから曲を削除することを決定した場合などを適切に処理できます。

于 2012-07-17T19:32:53.753 に答える