gpt4 book ai didi

objective-c - 核心数据整数变化值?

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:32:53 25 4
gpt4 key购买 nike

我对存储整数的核心数据有疑问(我选择了 int16,因为它们最多有 6 个符号)。

我的模型成立

Entity: 'Expense'
the attribute in question is:


@property (nonatomic, retain) NSNumber * month;

它由 Xcode (Editor > createManagedmodelsubclass) 自动实现为 NSNumber

month 包含每个月的短标识符。例子

201203     //would be march of 2012

我用这个片段存储新实体:

[newExpense setValue:monthNumber forKey:@"month"];

效果很好。在我存储之前,monthNumber 始终具有正确的值。

我使用获取方法检索对象并将它们存储在名为 allExpenses 的数组中。数组计数为真,其中包含适量的实体。

现在我这样做:

NSMutableArray *thisMonthExpenses = [[NSMutableArray alloc]init ];

for (Expense *entity in allExpenses) {
int tempMonth = [[entity month]intValue];
if (tempMonth == month) {
[thisMonthExpenses addObject:entity];

}
}

过滤掉属于当月的正确实体。

month // is an integer that holds the encoded month (again: correctly!)

但不知何故代码:

int tempMonth = [[entity month]intValue];

不返回 201203,而是 strangly 4595(总是相同的值)。

这段代码也是如此:

for (Expense *entity in monthExpenses) {
if ([entity day].intValue == todayNumber.intValue) { //HERE ENTITY DAY.INTVALUE RETURNS A COMPLETELY WRONG INTEGER!
[thisDayExpenses addObject:entity];
}
}

我似乎遗漏了什么 - 但我不知道是什么,我现在试了 2 个小时,在阅读我的实体后总是得到错误的 int 值..

有什么想法吗?

最佳答案

201203 是 0x311F3,而 4595 是 0x11F3 — 所以发生的事情是,您丢失了最高有效字节。听起来在 CoreData 中你将数字设置为 16 位整数,它不能存储你想要的数字(16 位只能表示十进制的低五位数字)。它应该是一个 32 位整数。

关于objective-c - 核心数据整数变化值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9610592/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com