NSRange输出的位置和长度

时间:2014-09-10 15:09:59

标签: objective-c nslog nsrange

我遇到的一个问题(也许这很容易解决,但我是Obj-C的新手。 我想打印出我创建的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')

2 个答案:

答案 0 :(得分:2)

解决方案:

一个。您必须单独记录每个组件:

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

B中。您可以将其转换为NSString的实例,然后记录字符串:

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

输出

{1, 2}

NSStringFrom…()-description类似,适用于多种类型,包括NSSizeNSPoint

答案 1 :(得分: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)。