Iphone iOS媒体选择器未显示

Iphone iOS媒体选择器未显示,iphone,c++,objective-c,core-audio,objective-c++,Iphone,C++,Objective C,Core Audio,Objective C++,我目前正在iPhone上开发一个音频应用程序。它基于苹果的SpeakHere示例代码,带有来自iPod库的用户定义输入文件 以下是按钮引发的事件: - (IBAction) btn_PickSong_Clicked:(id)sender{ [self showMediaPicker]; //code importing tracks from library } 在showMediaPicker方法中: //Yup the program does reach this method b

我目前正在iPhone上开发一个音频应用程序。它基于苹果的SpeakHere示例代码,带有来自iPod库的用户定义输入文件

以下是按钮引发的事件:

- (IBAction) btn_PickSong_Clicked:(id)sender{

[self showMediaPicker]; 

//code importing tracks from library
}
在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];
}
问题是:

  • 库导入功能在单独的程序中工作正常,但当我将代码放入
    SpeakHereController.mm
    时,媒体选择器不再显示

  • 另外,如果我将showMediaPicker方法放在另一个类中并调用它,它也不会工作

  • 我发现可能与此相关:

  • 原始代码在一个obj-C文件(xxx.m)中,现在它被传输到一个obj-C++文件(xxx.mm)中

  • 我还将
    SpeakHereController.h
    的基类从
    NSObject
    修改为
    UIViewController
    ,否则它将抛出一个警告,指出基类不包含所需的委托。但在interface builder中,它仍然显示为对象(请参阅SpeakHere示例代码)

  • 似乎将内置的
    xxxViewController.m
    文件转换为obj-C++文件(.mm扩展名)是非法的。在这种情况下,如果我尝试这样做,将会出现很多错误。这是真的吗?如果是,如何在纯Obj-C文件中包含C++代码?

  • =============

    那么,在这种情况下,我怎样才能让媒体选择器出现呢?如有任何见解,将不胜感激

    多谢各位

    干杯

    曼卡

    为了

    [self presentModalViewController:mediaPicker animated:YES];
    
    要工作,self需要是一个viewcontroller。我担心您刚刚更改了基类以避免编译器错误,因为这表明您没有正确地实例化“self”

    那么你是如何初始化SpeakHereController的?作为视图控制器,这通常是通过指定的初始化器实现的,对于UIViewController,它当然是initWithNibName:bundle:

    你可能会觉得有用


    关于C++问题。虽然你可以按照你建议的方式混合ObjtoVelc和C++,但我建议你把C++代码封装在它自己的类中,而不是在VIEW控制器代码中洒落。这将使它更能为将来维护。

    你的控制器中需要哪些特定的C++特性,为什么?@ Peter DeWeese,它是CaseReMexDistopy.CPP,它由苹果的iPuffic公用事业公司提供。每次我尝试在视图控制器中导入它时,它们的内联方法都会出现很多错误。我想这可能是问题所在。谢谢罗杰!我同意你的观点,封装应该是关键,因为Obj-c++编译器可能无法识别那些内联方法中的错误(我想是吧?)。由于C++代码来自苹果的iPuffic公用事业,我想知道这是否是一个好主意触摸它…顺便说一句,我也尝试了if(_cplusplus)包装方法,但它也不起作用:-(