我试图从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中的不同方式。但是,我无法弄清楚这些存储方法是什么,以便我可以使用它们。
感激不尽的任何帮助。
添
答案 0 :(得分:1)
当您在plist
或coreData
中存储号码时,它将存储为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);