1

我在 plist 中维护了信标信息,当我初始化 CLBeaconRegion 时,我得到了该区域的不同主要和次要值。在执行 NSLog 之后,我开始知道在 NSString 中保存的 Major 和 Minor 值给了我在 plist 中的正确值,当我将值转换为 CLBeaconMajorValue 或 CLBeaconMinorValue 或 NSInteger 时,值是不同的。我已经更改了 plist 中的 NSString 和 Number 数据类型,但没有运气。为什么会这样?你能帮我纠正这个问题吗?

                NSUInteger major = (NSUInteger) [beaconInfo objectForKey:@"major"];
                NSUInteger minor = (NSUInteger)[beaconInfo objectForKey:@"minor"];

                NSLog(@"major : %ld, minor : %ld", major, minor);


                NSString *majorString =  [beaconInfo objectForKey:@"major"];
                NSString *minorString = [beaconInfo objectForKey:@"minor"];
                 NSLog(@"major : %@, minor : %@", majorString, minorString);
                NSLog(@"major : %hu, minor : %hu",  (CLBeaconMajorValue)majorString, (CLBeaconMinorValue) minorString);

                CLBeaconRegion *region = [[CLBeaconRegion alloc] initWithProximityUUID: [[NSUUID alloc] initWithUUIDString: [beaconInfo objectForKey:@"uuid"]] major: (CLBeaconMajorValue) [beaconInfo objectForKey:@"major"] minor: (CLBeaconMinorValue) [beaconInfo objectForKey:@"minor"] identifier:@"com.test"];
                NSLog(@"%@", region);        

列表是

在此处输入图像描述

生成的 NSLog 是

主要:-5764607523034234861,次要:-5764607523034234861

主要:1,次要:1

主要:19,次要:19

CLBeaconRegion(标识符:'com.test',uuid:03672CE6-9272-48EA-BA54-0BF679217980,主要:19,次要:19)

4

1 回答 1

3

在您的 plist 中,该值键入为Number,因此这些值是NSNumber在读取时。

[beaconInfo objectForKey:@"major"]对象也是如此NSNumber

所以你需要写NSUInteger major = [(NSNumber *)[beaconInfo objectForKey:@"major"] integerValue];可以简化的NSUInteger major = [[beaconInfo objectForKey:@"major"] integerValue];

未成年人也一样。

只需检查 .plist 中的所有主要/次要值是否都是数字类型。

于 2018-08-08T15:30:37.297 回答