2014-05-01 92 views
0

我正在尋找循環訪問我的NSArray *網址 - 對每個對象進行一些字符串調整。循環瀏覽URL的NSArray - 崩潰 - iOS

但是,一旦它進入For循環並嘗試調整NSString *的東西 - 這會引發異常。

任何想法爲什麼我難倒?

- (void)GetData 
    { 
     NSFileManager *fm = [NSFileManager defaultManager]; 
     NSString *directory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
     directory = [NSString stringWithFormat:@"%@/%@/%@/%@", directory, self.researcherID, self.participantID, testTypeString]; 
     directory = [directory stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 
     NSError *error; 
     NSURL *url = [NSURL URLWithString:directory]; 
     NSArray *urls = [fm contentsOfDirectoryAtURL:url includingPropertiesForKeys:nil options:0 error:&error]; 


     for (int x = 0; x < urls.count; x++) { 

      NSString *urlIndex = urls[x]; 


      NSString *thing = [urlIndex stringByReplacingOccurrencesOfString:@"%20" withString:@" "]; 
      thing = [thing stringByReplacingOccurrencesOfString:@"file://" withString:@""]; 


      // add thing to new array but crashes before i can 
     } 
    } 

編輯: 拋出異常

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSURL stringByReplacingOccurrencesOfString:withString:]: unrecognized selector sent to instance 0x14ebf1a0' 
+1

aaaaand ....有什麼例外? –

+0

@MichaelDautermann - 哎呀 - 忘了提,我現在編輯了我的帖子。 – Ryan

+2

@Ben也可以使用快速枚舉,爲您提供更好的性能,即爲(NSURL * url in url){// code here} –

回答

5
NSArray *urls = [fm contentsOfDirectoryAtURL:url includingPropertiesForKeys:nil options:0 error:&error]; 

返回NSURL對象,而不是NSString S的陣列。您可以將URL轉換爲字符串 只需用

NSString *path = [urls[x] path]; 

,使該字符串操作過時。或者,使用

NSArray *files = [fm contentsOfDirectoryAtPath:directory error:&error]; 

返回NSString對象,而不是NSURL S的陣列。

+0

+1 ...在Ben編輯後,我甚至沒有時間回答。 –

+0

不錯 - 我很尷尬,答案很簡單! :) – Ryan

+0

@Ben:你也應該使用'NSURL * url = [NSURL fileURLWithPath:directory]',這會使'stringByAddingPercentEscapesUsingEncoding'過時。 - 所以簡而言之:如果你在URL和字符串中使用「奇怪的字符串操作」,那麼你可能做錯了:-) –

1

拋出的異常使其非常明顯。

'-[NSURL stringByReplacingOccurrencesOfString:withString:]: unrecognized selector 

您要發送的消息stringByReplacingOccurrencesOfString:withString:類NSURL,不承認它的客體。那就是問題所在。

你很幸運;呼叫是在自己的代碼,在這裏:

NSString *thing = [urlIndex stringByReplacingOccurrencesOfString:@"%20" withString:@" "]; 

您認爲urlIndex是一個NSString,但實際上它是一個NSURL,所以你必須找到合適的NSURL方法。僅僅因爲你將一個數組元素分配給NSString *並不會使它成爲NSString *。

未來:在Xcode中,設置一個觸發所有異常的斷點,以便在發現問題時在崩潰之前停止。這樣你就可以看到調用棧,並可以在代碼中找到問題的來源。