【发布时间】:2011-09-14 15:16:42
【问题描述】:
我正在完全用代码(没有 IB)制作 UIView 的子类,我们称之为 ContentView。在这个视图中,我已经为声音和视频设置了几个播放器,以及几个 imageViews(没什么特别的)。
接下来,我计划将 ContentView 子类化几次,以便为每个视图加载不同的媒体。所有这些视图都将具有相同的视图控制器,因为它们的界面都是相同的,只有内容(声音、视频和图像)会发生变化。
所以我解决这个问题的方法是在 ContentView.h 中声明几个 NSString *const 并在 ContentView 的每个子类视图的实现文件中指定它们的键/值,以static NSString *const 的形式,因为我将重用它们来为每个视图加载不同的媒体,并且不希望它们在全局名称空间中。
这里有一些模型代码来说明我在说什么:
在 ContentView.h 中
@interface ContentView : UIView {
NSString *const kSoundFile1;
NSString *const kSoundFile2;
NSString *const kSoundFileType;
NSString *const kMovieFile1;
NSString *const kMovieFile2;
NSString *const kMovieFileType;
NSString *const kImage1;
NSString *const kImage2;
在 ContentView.m 中,类似的东西,
@implementation ContentView
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
NSString *filePath1 = [[NSBundle mainBundle] pathForResource: kSoundFile1
ofType: kSoundFileType;
NSURL *url1 = [[NSURL alloc] initFileURLWithPath:filePath1];
AVAudioPlayer *audioPlayer1 = [AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
[audioPlayer1 prepareToPlay];
[url1 release];
...等等,对于其余的声音文件和电影(图像除外,我使用imageNamed:)。
然后在 ContentView 的每个子类的实现文件上我只有这个:
@implementation ContentViewSubclass
static NSString *const kSoundFile1 = @"sound1";
static NSString *const kSoundFile2 = @"sound2";
static NSString *const kSoundFileType = @"wav";
static NSString *const kMovieFile1 = @"movie1";
static NSString *const kMovieFile2 = @"movie2";
static NSString *const kMovieFileType = @"mov";
static NSString *const kImage1 = @"image1.png";
static NSString *const kImage2 = @"image2.png";
@end
我无法完成这项工作。没有编译器错误或警告,根本没有播放或显示。我做错了什么,还是这不是解决问题的正确方法?
我真的很感激一些见解。提前致谢。
【问题讨论】:
-
您是否使用调试器单步执行代码以查看失败的原因?
-
是的,我有。问题在于子类上的静态 NSString 常量声明。
标签: iphone objective-c xcode cocoa-touch nsstring