在 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 是否都是数字类型。