整数是如何存储在iOS中的,特别是在.pList和CoreData中

时间:2013-08-11 11:01:13

标签: ios numbers integer storage

我试图从pList中取一个小整数(例如4)并将其放入托管对象中以供稍后操作。但是,当我将它从托管对象中取出并将其放入NSInteger时,它已经完全改变了。 4已成为237371328!

该数字在pList中存储为“Number”,在受管对象中存储为整数16。 我有两个字段:timesAsNumber,它是整数16,timesUsed是字符串(我当前的工作!)。

涉及的代码行是:

NSArray *usageFetchResults = [self.objectContext executeFetchRequest:request error:&error];

NSLog(@"Here is the usageArray: %@, with error: %@",usageFetchResults, error);

这给出了日志结果:

数据:{\ n feature = video; \ n timesAsNumber = 4; \ n timesUsed = 4; \ n})“ ),错误:(null)

因此记录器知道timesAsNumber的值为4。

NSLog(@"timesAsNumber straight from the Managed Object: %@", [currentUseData valueForKey:@"timesAsNumber"]);

生成结果:timesAsNumber直接来自托管对象:4所以仍然没问题。

然而,

NSInteger timesUsedAsInt = [currentUseData valueForKey:@"timesAsNumber"];
NSLog(@"times As Number now reads: %ld", (long)timesUsedAsInt);

产生结果:次数现在为:237371328

我需要将数字作为操作的整数,我的存储方式是字符串和来回转换并不优雅!

我教高中计算,所以我知道浮点数的存储:超过127,二进制补码等。我假设问题源于整数存储在pList,被管对象和NSInteger中的不同方式。但是,我无法弄清楚这些存储方法是什么,以便我可以使用它们。

感激不尽的任何帮助。

1 个答案:

答案 0 :(得分:1)

当您在plistcoreData中存储号码时,它将存储为NSNumber。因此,您可以访问NSInteger myInt = myNumber.intValue的值。当您将其转换回来时,请使用NSNumber *myNumber = [NSNumber numberWithInt:myInt]。由于您忘记将NSNumber转换为int,因此可能会显示该较大的数字(237371328)。希望这会有所帮助。

修改

尝试:

NSInteger timesUsedAsInt = [[currentUseData valueForKey:@"timesAsNumber"] intValue];
NSLog(@"times As Number now reads: %ld", (long)timesUsedAsInt);