我在这行代码中收到警告Comparison of distinct pointer types ('NSString *' and 'NSNumber *')
:
if(beacon.beaconIdentifier == self.identifier) {
// do something
}
两者都应包含NSNumber。对象beacon
是CLBeacon。 self.identifier
是NSNumber。其他可能相关的代码:
CLBeacon类别
@interface CLBeacon ();
@property(nonatomic, strong) NSNumber *beaconIdentifier;
@end
static char const *const MyBeaconIdentifier = "MyBeaconIdentifier";
....
- (CLBeacon *)initWithJSON:(NSDictionary *)json {
self = [super init];
if (self) {
...
self.beaconIdentifier = json[@"id"];
}
return self;
}
- (void) setBeaconIdentifier:(NSNumber *)beaconIdentifier {
objc_setAssociatedObject(self, MyBeaconIdentifier, beaconIdentifier, OBJC_ASSOCIATION_RETAIN);
}
- (NSNumber *)beaconIdentifier {
return objc_getAssociatedObject(self, MyBeaconIdentifier);
}
json[@"id"]
始终只包含数字。除了警告,一切都按预期运行。是什么导致我的问题以及可能解决的问题?
感谢几个很好的回复,我设法解决了警告。不过,如果可能的话,我想知道是什么原因造成的。
beacon.beaconIdentifier.class
记录_NSCFNumber
,就像self.identifier
一样。
答案 0 :(得分:1)
你说json[@"id"]
包含一个数字,但在编译时并不知道。因此警告。它仅在运行时由编译器识别为NSNumber
。
要检查NSNumber
的相等性,请尝试使用此代码
if([beacon.beaconIdentifier isEqualToNumber:self.identifier]) {
// do something
}