核心数据整数变化值?

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值.

有任何想法吗?

Chu*_*uck 5

201203是0x311F3,而4595是0x11F3 - 所以发生了什么,你丢失了最重要的字节.听起来像在CoreData中你将数字设置为16位整数,它不能存储你想要的数字(16位只能代表十进制的低五位数).它应该是一个32位整数.