我遇到的一个问题(也许这很容易解决,但我是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')
答案 0 :(得分:2)
解决方案:
一个。您必须单独记录每个组件:
NSLog( @"%lu - %lu", (long)range.location, (long)range.length );
B中。您可以将其转换为NSString
的实例,然后记录字符串:
NSLog( @"%@", NSStringFromRange(range) );
输出
{1, 2}
NSStringFrom…()
与-description
类似,适用于多种类型,包括NSSize
,NSPoint
。
答案 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)。