2010-05-04 51 views
2

我有問題,pathForResource不起作用

NSString *filePaht = [[NSBundle mainBundle] pathForResource:(NSString *)name ofType:(NSString *)ext]; 

。但是當我用

NSString *fileName = [[file.list objectAtIndex:index] objectForKey:@"soundName"]; 
NSString *filePaht = [[NSBundle mainBundle] pathForResource:fileName ofType:@"aiff"]; 

它不工作

有什麼想法!?

謝謝

+1

該問題似乎與'文件名',但很難說沒有更多的代碼。什麼是'file.list',它是如何初始化的? – 2010-05-04 17:01:44

+0

「這不是工作」你有什麼具體問題? – 2010-05-07 02:50:12

回答

6

我打算猜測file.list中的fileName包含文件擴展名。所以你正在尋找不存在的「soundName.aiff.aiff」。嘗試通過@「」類型或從文件名剝離擴展:

fileName = [fileName stringByDeletingPathExtension]; 
1

檢查調試器控制檯,因爲它可能會告訴你正在做的事情是錯誤的。

[file.list objectAtIndex:index] 

如果你得到一個NSRangeException,這可能是因爲index包含索引是數組的界限之外。請記住Cocoa中的數組是串行的,而不是關聯的;如果你刪除了一個對象,它後面的所有對象的索引將下降1,並支持0≤(每個有效索引)<(數組中對象的數量)的不變量。

也可能是因爲you never declared a variable named index

NSString *fileName = [[file.list objectAtIndex:index] objectForKey:@"soundName"]; 
NSString *filePaht = [[NSBundle mainBundle] pathForResource:fileName ofType:@"aiff"]; 

如果什麼也沒有發生,或者你得到一個NSInternalInconsistencyException,它可能是一個:

  • fileListnil
  • [file.list objectAtIndex:index]返回的字典沒有密鑰soundName的對象。

如果你有在控制檯「不響應選擇」的消息,它可能是一個:

  • file.list是一個對象,而不是一個NSArray。
  • [file.list objectAtIndex:index]不是NSDictionary。
  • fileName[[file.list objectAtIndex:index] objectForKey:@"soundName"])不是NSString。

請記住,聲明變量時使用的類名除了編譯器外無關緊要;在運行時,它只是一個持有指向對象的指針的變量。該對象可以是任何類。將不是NSString的東西放入NSString *變量是完全有效的;它只是承擔了非常高的(幾乎確定的)錯誤行爲風險和/或隨後崩潰的風險。

這樣的崩潰通常會以「不響應選擇器」異常的形式出現(例如,在某些事件向對象發送NSString對象應該響應的消息之後,但該對象不響應因爲它不是NSString)。

您遇到哪種問題,您可以使用the Debugger進行調查。

0

對不起,我的錯。 我從XML文件 獲取數據,並且該數據包含「\ n」。是的,我看到「\ n」,所以我用@「」來代替 ,但它不夠,我必須再次修正空間值。

感謝您的所有建議^ _^