2014-09-10 69 views
1

我有一個問題(也許它很容易解決,但我是Obj-C的新手 我想打印出我創建的NSRange的位置和長度,但是我得到了一個。錯誤消息,這裏的代碼NSRange輸出的位置和長度

NSRange tmpRange = [newData rangeOfData:segmentToFind options:kNilOptions range:NSMakeRange(0u, [newData length])]; 

NSLog(@"%@ - range location : %lu", [tmpRange location]; 

該錯誤消息我得到的是:

Bad receiver type 'NSRange' (aka 'struct _NSRange') 
+1

你有2個佔位符,並且'NSLog'中只有一個參數。 – Larme 2014-09-10 15:11:47

回答

2

爲了解決方案:

答:您必須分別登錄每個組件:

NSLog(@"%lu - %lu", (long)range.location, (long)range.length); 

B.你可以把它轉換成的NSString一個實例,然後登錄串:

NSLog(@"%@", NSStringFromRange(range)); 

輸出

{1, 2} 

NSStringFrom…()類似於-description並存在許多類型,包括NSSizeNSPoint

+0

用於提及NSStringFrom ...函數。 – gnasher729 2014-09-10 15:35:26

0

NSRange以字母NS開頭,但它不是NSObject。它是一個普通的結構體,就像C或C++中的結構體一樣。因此,要訪問位置和長度,只需使用range.location和range.length。還有其他的結構,比如NSRect,NSPoint,NSSize。

你已經注意到了編譯器所說的:NSRange是類型「struct _NSRange {...}」的typedef。

然後有像NSInteger和NSUInteger這樣的類型,它們也是以NS開始的,但它們實際上只是原始類型(int或long,unsigned int或unsigned long)。