我在代碼中完全構建了UIView的子類(無IB),我們稱之爲ContentView。在這個視圖中,我已經設置了幾個聲音和視頻播放器,以及幾個imageViews(沒什麼特別的)。使用NSString爲每個視圖子類加載不同的媒體文件* const
接下來,我打算將ContentView分類幾次,以便爲每個視圖加載不同的媒體。所有這些視圖都有相同的視圖控制器,因爲界面對於所有視圖都是相同的,只有內容(聲音,視頻和圖像)會改變。
所以我的辦法處理這一問題是在宣佈幾個NSString *const
內容查看 h和在內容查看的每個子視圖的實現文件中指定的鍵/值,在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:
)。
然後在內容查看的每個子類實現文件我剛纔這樣的:
@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
我不能做這項工作。沒有編譯器錯誤或警告,只是沒有播放或顯示。我做錯了什麼,還是這不是解決問題的正確方法?
我真的很感謝一些見解。提前致謝。
你是否已經通過調試器完成代碼,看看哪些失敗? – Mark 2011-06-14 11:47:21
是的,我有。問題在於子類中的靜態NSString常量聲明。 – MiguelB 2011-06-14 12:50:59