2013-02-18 38 views
3

我用下面的代碼之後`到底要替換文件的擴展名:垃圾在NSString`的`上的Xcode stringByReplacingCharactersInRange`方法調用

NSString *fileOriginal = [url lastPathComponent]; 
NSString *fileSource = @""; 
NSRange range = [fileOriginal rangeOfString:@"." options:NSBackwardsSearch]; 
if (range.length > 0) { 
    range.length = fileOriginal.length - range.location; 
    fileSource = [fileOriginal stringByReplacingCharactersInRange:range withString:[NSString stringWithFormat:@".%@", @"cpp"]]; 
} else { 
    fileSource = [fileOriginal stringByAppendingString:[NSString stringWithFormat:@".%@", gFileExtension]]; 
} 

的代碼工作正常。但是,調試器顯示垃圾的NSString末:

enter image description here

同樣的結果,如果我嘗試添加retain爲字符串。到底發生了什麼?

+0

「gFileExtension」的定義在哪裏? – aroth 2013-02-18 01:57:16

+0

如果您停在斷點處並執行'po fileSource',您將看到正確的輸出。在查看變量視圖中的值時,我也看到了這種奇怪的垃圾。 – rmaddy 2013-02-18 01:58:40

+0

'gFileExtension'是define @「cpp」 – Dmitry 2013-02-18 02:07:42

回答

1

假設你的gFileExtension定義是有效的,爲什麼不試試這個:

NSString *fileSource; 
if ([[fileOriginal pathExtension] length] > 0) 
{ 
    fileSource = [[fileOriginal stringByDeletingPathExtension] stringByAppendingPathExtension:gFileExtension]; 
} 
else 
{ 
    fileSource = [fileOriginal stringByAppendingPathExtension:gFileExtension]; 
} 

使用路徑處理內置NSString,你不必擔心點;它爲你完成。

+0

非常感謝!但爲什麼調試器顯示垃圾? – Dmitry 2013-02-18 02:15:13

+1

剛纔不能直視你(和妻子在一起),但我的猜測是你的範圍的長度可能與它有關。 – trudyscousin 2013-02-18 02:37:55

+0

range.position = 12,range.length = 3,replaceFrom = @「。cp」,replaceTo = @「。cpp」,replaceWhere = @「Hello,World.cp」 – Dmitry 2013-02-18 02:57:55