2012-03-07 6 views
2

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

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

Entity: 'Expense' 
the attribute in question is: 


@property (nonatomic, retain) NSNumber * month; 

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

месяц проводит короткий идентификатор для каждого месяца. Пример

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 часов в настоящее время и всегда получить неверное значение ИНТ после прочтения моих объектов ..

любые идеи?

+0

Действительно ли месяцNumber определен NSNumber, когда вы назначаете это значение для управляемого объекта? Вы не показываете происхождение, возможно, его нужно вставить в коробку? – isaac

+0

Например: [newExpense setMonth: [Номер NSNumberWithInt: monthNumber]]; – isaac

+0

Я тоже пробовал это @isaac. но это не имеет никакого значения. я все еще получаю неправильный int, возвращенный при попытке проверить его:/ –

ответ

4

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

+0

, который звучит многообещающе - я дам ему попробовать завтра (его 1'30am здесь сейчас) il up принять ваш ответ, конечно, если он работает =) –

+0

работает сейчас - большое спасибо, иногда ответ слишком близок, чтобы видеть; -) –

0

вы пробовали

Expense.month = monthNumber; 

или

[Expense setMonth:monthNumber]; 
+0

Я не хочу установить monthNumber. Я хочу получить его. –

+0

, и я могу получить его. но я не получаю значение, которое должно быть там. –

+0

Почему вы думаете, что это изменило бы ситуацию? Я бы подумал, что именно это будет делать оригинальный код Себастьяна под капотом. – Chuck

Смежные вопросы