Seb*_*ger 2 core-data objective-c ios
我有核心数据存储整数的问题(我选择int16因为它们最多有6个符号).
我的模特成立了
Entity: 'Expense'
the attribute in question is:
@property (nonatomic, retain) NSNumber * month;
Run Code Online (Sandbox Code Playgroud)
它由Xcode自动实现为NSNumber(Editor> createManagedmodelsubclass)
month每个月都有一个简短的标识符.例
201203 //would be march of 2012
Run Code Online (Sandbox Code Playgroud)
我使用此代码段存储新实体:
[newExpense setValue:monthNumber forKey:@"month"];
Run Code Online (Sandbox Code Playgroud)
哪个工作得很好.在存储之前,monthNumber始终具有正确的值.
我使用提取方法检索对象并将它们存储在一个名为的数组中allExpenses.数组计数为true,我有适量的实体.
现在我这样做:
NSMutableArray *thisMonthExpenses = [[NSMutableArray alloc]init ];
for (Expense *entity in allExpenses) {
int tempMonth = [[entity month]intValue];
if (tempMonth == month) {
[thisMonthExpenses addObject:entity];
}
}
Run Code Online (Sandbox Code Playgroud)
过滤掉属于当前月份的正确实体.
month // is an integer that holds the encoded month (again: correctly!)
Run Code Online (Sandbox Code Playgroud)
但不知何故的代码:
int tempMonth = [[entity month]intValue];
Run Code Online (Sandbox Code Playgroud)
不会返回201203,而是返回4595(总是相同的值).
这段代码也是如此:
for (Expense *entity in monthExpenses) {
if ([entity day].intValue == todayNumber.intValue) { //HERE ENTITY DAY.INTVALUE RETURNS A COMPLETELY WRONG INTEGER!
[thisDayExpenses addObject:entity];
}
}
Run Code Online (Sandbox Code Playgroud)
我似乎错过了什么 - 但我无法弄清楚是什么,我现在试了2个小时,并在阅读我的实体后总是得到错误的int值.
有任何想法吗?
201203是0x311F3,而4595是0x11F3 - 所以发生了什么,你丢失了最重要的字节.听起来像在CoreData中你将数字设置为16位整数,它不能存储你想要的数字(16位只能代表十进制的低五位数).它应该是一个32位整数.
| 归档时间: |
|
| 查看次数: |
935 次 |
| 最近记录: |