2014-09-12 1 views
0

новичок в Objective-C, но я пытаюсь добавить музыкальный сборщик в мое приложение в xCode, то, где вы его нажимаете, и открывает для них музыкальную библиотеку пользователей выбрать песню, но я не могу понять, как это сделать, и вся документация, которую я видел, кажется, не работает. Например,Pull-up Media Picker xCode/Objective-C

MPMediaPickerController *picker = 
    [[MPMediaPickerController alloc] 
     initWithMediaTypes: MPMediaTypeAnyAudio];     // 1 

[picker setDelegate: self];           // 2 
[picker setAllowsPickingMultipleItems: YES];      // 3 
picker.prompt = 
    NSLocalizedString (@"Add songs to play", 
         "Prompt in media item picker"); 

[myController presentModalViewController: picker animated: YES]; // 4 
[picker release]; 

находится непосредственно у справки компании Apple. Когда я печатаю это в мое приложение, я получаю ошибки:

mediaPicker.delegate = self; // Error: Assigning to 'id<MPMediaPickerControllerDelegate?' from incompatible type "ViewController *const__stron" 

и

[self presentModalViewController:mediaPicker animated:YES]; // Error: 'presentModalViewController:animated:' is deprecated: first deprecated in iOS 6.0 

Я чувствую, что мне нужно сделать что-то с mediaPicker.delegate = self; линии, но не знаю, что. Любая помощь?

ответ

1

Изменить эту строку:

mediaPicker.delegate = self; // Error: Assigning to 'id<MPMediaPickerControllerDelegate?' from incompatible type "ViewController *const__stron" 

в

mediaPicker.delegate = id<MPMediaPickerControllerDelegate>self; 

или вы можете пойти в файл заголовка класса самостоятельно и там соответствовать MPMediaPickerControllerDelegate, написав это как так -

@interface CLassName : UIViewController <MPMediaPickerControllerDelegate> { 
//code 
} 

Что касается вашей второй проблемы, воспользуйтесь этим методом:

- (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void (^)(void))completion NS_AVAILABLE_IOS(5_0) 

Метод, который вы используете, устарел, поэтому лучше используйте этот новый. Используйте это как например:

[self presentViewController:mediaPicker animated:YES completion:nil]; 

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

Надеюсь, это поможет. Приветствия.

***** ***** EDIT
Предположим, имя класса TestMediaPickerController. Затем перейдите к файлу TestMediaPickerController.h, затем в файле заголовка, где вы объявили интерфейс, сделайте следующее: Сначала добавьте это в заголовок.

#import <MediaPlayer/MediaPlayer.h> 

затем

@interface TestMediaPickerController : UIViewController <MPMediaPickerControllerDelegate> { //Adding this `<MPMediaPickerControllerDelegate>` here makes your TestMediaPickerController Class confirm to the Protocol MPMediaPickerControllerDelegate. 
    //code 
} 

Проблема, что вы испытываете это, кажется, вы с настройкой на MPMediaPickerControllerDelegate проблемы.

+0

Когда я печатаю в mediaPicker.delegate = id self; Я получаю ошибки «Использование необъявленного идентификатора« MPMEdiaPickerControllerDelegate », вы имели в виду« MPMediaPickerController »и« Неожиданное имя типа «id»: ожидаемое выражение «Я пропущу что-то очевидное?» Другая проблема исправлена, хотя! Большое спасибо за ваша помощь до сих пор! – Pecans

+0

вы пытались соответствовать протоколу в заголовке класса, как я показал. – croyneaus4u

+0

Ненавижу быть здесь noob, но как бы я это сделал?: P Это просто файл viewContoller.h? – Pecans