0

我正在尝试从 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);

产生结果:times As Number 现在读取:237371328

我需要将数字作为整数进行操作,而我将存储为字符串并来回转换的解决方法并不优雅!

我教高中计算,所以我知道浮点数的存储:excess-127、二进制补码等。我认为问题是由整数在 pList、托管对象和 NSInteger 中存储的不同方式引起的。但是,我无法弄清楚这些存储方法是什么,以便我可以使用它们。

感激地收到任何帮助。

蒂姆。

4

1 回答 1

1

当你在plistor中存储一个数字时coreData,它被存储为 NSNumber。因此,您可以将值访问为NSInteger myInt = myNumber.intValue. 当您将其转换回来时,请使用NSNumber *myNumber = [NSNumber numberWithInt:myInt]. 由于您忘记NSNumberint. 希望这可以帮助。

编辑:

尝试:

NSInteger timesUsedAsInt = [[currentUseData valueForKey:@"timesAsNumber"] intValue];
NSLog(@"times As Number now reads: %ld", (long)timesUsedAsInt);
于 2013-08-11T11:21:49.740 回答