Iphone iOS媒体选择器未显示
我目前正在iPhone上开发一个音频应用程序。它基于苹果的SpeakHere示例代码,带有来自iPod库的用户定义输入文件 以下是按钮引发的事件: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
- (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
时,媒体选择器不再显示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)包装方法,但它也不起作用:-(