【问题标题】:Core Data Integer changing value?核心数据整数改变值?
【发布时间】:2012-03-25 12:27:07
【问题描述】:

核心数据存储整数时遇到问题(我选择 int16 是因为它们最多有 6 个符号)。

我的模型持有

Entity: 'Expense'
the attribute in question is:


@property (nonatomic, retain) NSNumber * month;

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

month 为每个月保存一个简短的标识符。例子

201203     //would be march of 2012

我用这个 sn-p 存储新实体:

[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,而是奇怪的 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 值..

有什么想法吗?

【问题讨论】:

  • 当您将该值分配给托管对象时,monthNumber 绝对是一个 NSNumber 吗?你不显示原产地,也许它需要装箱?
  • 例如:[newExpense setMonth:[NSNumber numberWithInt:monthNumber]];
  • 我也试过@isaac。但这没有任何区别。尝试检查时,我仍然返回错误的 int :/
  • 我在最后一段代码中添加了 CAPS 注释,再次向您展示出了什么问题。

标签: objective-c ios core-data


【解决方案1】:

你试过了吗

Expense.month = monthNumber;

[Expense setMonth:monthNumber];

【讨论】:

  • 我不想设置月份。我想找回它。
  • 我可以找回它。但我没有得到应有的价值。
  • 您为什么认为这会有所作为?我认为这正是 Sebastian 的原始代码在幕后所做的。
【解决方案2】:

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

【讨论】:

  • 这听起来很有希望 - 我明天会试一试(现在是凌晨 1 点 30 分)我当然会接受你的回答,如果它有效 =)
  • 现在有效 - 非常感谢,有时答案太近了,看不到 ;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-03
  • 1970-01-01
相关资源
最近更新 更多