在 Objective-c 中访问时 plist 存储的值不同
plist stored value is different while accessing in Objective-c
我在 plist 中维护了信标信息,当我初始化 CLBeaconRegion 时,我得到了该区域的不同 Major 和 Minor 值。在执行 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);
plist 是
生成的 NSLog 是
主要:-5764607523034234861,次要:-5764607523034234861
主要:1,次要:1
主要:19,次要:19
CLBeaconRegion(标识符:'com.test'、uuid:03672CE6-9272-48EA-BA54-0BF679217980、major:19、minor:19)
在您的 plist 中,值键入为 Number
,因此读取时值为 NSNumber
。
所以 [beaconInfo objectForKey:@"major"]
是一个 NSNumber
对象。
所以你需要写 NSUInteger major = [(NSNumber *)[beaconInfo objectForKey:@"major"] integerValue];
可以简化为 NSUInteger major = [[beaconInfo objectForKey:@"major"] integerValue];
未成年人也一样。
只需检查您的 .plist 中的所有值 major/minor 是否都是数字类型。
我在 plist 中维护了信标信息,当我初始化 CLBeaconRegion 时,我得到了该区域的不同 Major 和 Minor 值。在执行 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);
plist 是
生成的 NSLog 是
主要:-5764607523034234861,次要:-5764607523034234861
主要:1,次要:1
主要:19,次要:19
CLBeaconRegion(标识符:'com.test'、uuid:03672CE6-9272-48EA-BA54-0BF679217980、major:19、minor:19)
在您的 plist 中,值键入为 Number
,因此读取时值为 NSNumber
。
所以 [beaconInfo objectForKey:@"major"]
是一个 NSNumber
对象。
所以你需要写 NSUInteger major = [(NSNumber *)[beaconInfo objectForKey:@"major"] integerValue];
可以简化为 NSUInteger major = [[beaconInfo objectForKey:@"major"] integerValue];
未成年人也一样。
只需检查您的 .plist 中的所有值 major/minor 是否都是数字类型。