Core Data Integer меняет значение? - PullRequest
2 голосов
/ 08 марта 2012

У меня проблема с целочисленным хранением основных данных (я выбрал int16, потому что они имеют максимум 6 знаков).

моя модель держит

Entity: 'Expense'
the attribute in question is:


@property (nonatomic, retain) NSNumber * month;

это было автоматически реализовано как NSNumber XCode (редактор> createManagedmodelsubclass)

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, но удручает 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 после прочтения моих сущностей ..

есть идеи?

Ответы [ 2 ]

5 голосов
/ 08 марта 2012

201203 - это 0x311F3, а 4595 - 0x11F3, поэтому происходит потеря значащего байта.Похоже, что в CoreData у вас есть число, установленное как 16-разрядное целое число, которое не может хранить желаемое число (16 бит могут представлять только до пяти младших разрядов в десятичной системе).Это должно быть 32-разрядное целое число.

0 голосов
/ 08 марта 2012

вы пробовали

Expense.month = monthNumber;

или

[Expense setMonth:monthNumber];
...