2011-03-07 2 views
4

Je travaille actuellement sur une application audio sur iPhone. Il est basé sur l'exemple de code SpeakHere de Apple avec un fichier d'entrée défini par l'utilisateur à partir de la bibliothèque de l'iPod.Le sélecteur de média iOS n'apparaît pas

Voici l'événement déclenché par le bouton:

- (IBAction) btn_PickSong_Clicked:(id)sender{ 

[self showMediaPicker]; 

//code importing tracks from library 
} 

Et dans la méthode showMediaPicker:

//Yup the program does reach this method but the picker does not show up  
- (void)showMediaPicker { 

MPMediaPickerController* mediaPicker = [[[MPMediaPickerController alloc] initWithMediaTypes:MPMediaTypeMusic] autorelease]; 
mediaPicker.delegate = self; 
[self presentModalViewController:mediaPicker animated:YES]; 
} 

Les problèmes sont les suivants:

  1. La fonction d'importation de la bibliothèque fonctionne très bien dans un programme distinct, mais le sélecteur de média ne s'affiche plus lorsque je mets le code dans SpeakHereController.mm.

  2. De plus, si je place la méthode showMediaPicker dans une autre classe et l'appelle, cela ne fonctionne pas non plus.

Quelque chose que je trouve qu'il pourrait être utile:

  1. Le code original est dans un fichier Obj-C (xxx.m), et maintenant il est transféré dans un obj-C++ fichier (xxx .mm).

  2. J'ai également modifié la classe de base de SpeakHereController.hNSObject-UIViewController<MPMediaPickerControllerDelegate> sinon il va jeter un avertissement que la classe de base ne contient pas le délégué requis. Mais dans le constructeur de l'interface, il est toujours affiché en tant qu'objet (Veuillez vous référer à l'exemple de code SpeakHere).

  3. Il semble qu'il est illégal de convertir le fichier intégré xxxViewController.m en fichier obj-C++ (extension .mm). Dans ce cas, beaucoup d'erreurs apparaîtront si je tente de le faire. Est-ce vrai? Si oui, comment inclure du code C++ dans un fichier obj-C pur?

=============

Alors, comment puis-je faire le sélecteur de médias apparaissent dans ce cas? Toute perspicacité sera appréciée.

Merci beaucoup!

Cheers,

Manca

+0

De quelles fonctionnalités C++ spécifiques avez-vous besoin dans votre contrôleur, et pourquoi? –

+0

@Peter DeWeese c'est le CAStreamDescription.cpp, qui est fourni par iPublicUtility d'apple. Chaque fois que j'essaie de l'importer dans mon contrôleur de vue, beaucoup d'erreurs se produisent dans leurs méthodes en ligne. Je suppose que cela pourrait être le problème. – Manca

Répondre

1

Afin de

[self presentModalViewController:mediaPicker animated:YES]; 

au travail, l'auto doit être un viewcontroller. Je crains que vous veniez juste de changer la classe de base pour éviter les erreurs du compilateur car cela suggère que vous n'instanciez pas réellement 'self' correctement.

Alors, comment initialisez-vous le SpeakHereController? En tant que contrôleur de vue, ce serait normalement via l'initialiseur désigné, qui pour un UIViewController est bien sûr initWithNibName: bundle:

Vous pouvez trouver the documentation for UIViewController utile.

En ce qui concerne le problème C++.Bien que vous puissiez mélanger objectif-c et C++ comme vous le suggérez, je vous recommande d'encapsuler votre code C++ dans sa propre classe plutôt que de le saupoudrer autour de votre code viewcontroller. Cela le rendra plus facile à maintenir pour l'avenir.

+0

Thx Roger! Je suis d'accord avec vous que l'encapsulation devrait être le point parce que l'erreur à ces méthodes en ligne pourrait ne pas être reconnue par le compilateur Obj-C++ (je suppose?). Puisque le code C++ provient d'iPublicUtility de Apple, je me demande si c'est une bonne idée de le toucher ... BTW J'ai aussi essayé l'approche d'enveloppement if (_cplusplus), mais ça ne marche pas non plus :-( – Manca

Questions connexes