Базовые данные не сохраняют целое число правильно? При переходе с NSString на int - PullRequest
1 голос
/ 25 февраля 2012

Я использую данные Core в своем приложении, хорошо,

У меня проблема при сохранении числа, которое должно быть целым числом ... Когда я получаю его из Core Data, он показывает странное числозначение

Я знаю, что это работает, потому что при тесте с моим idTosave = 345 он показывает результаты CoreData, но при отправке значения [string to int], которое я знаю, просыпается, так как записывает правильноеВ ответ CD сохраняет странное значение:

(обратите внимание, что я сохраняю в сущности idRef)

NSLog(@"resultToDisplay:: %@", self.resultsToDisplay);

//    int idToSave = 345; //if I use this line instead of intValue it saves 345 OK!
int idToSave = (int)[self.resultsToDisplay intValue];


NSLog(@"id salvada as NSINTEGER:: %d",idToSave);



//graba a CD!
[Student insertWithDataQR:[studentDataDicto objectForKey:@"name"] surname:[studentDataDicto objectForKey:@"surname"] 
 phone:[studentDataDicto objectForKey:@""] 
 dob:[studentDataDicto objectForKey:@"dob"] idRef:idToSave ...]];

[[Student defaultManagedObjectContext]save:nil]; 

Выйти:

 resultToDisplay:: 1329955200
  2012-02-26 00:36:08.597 MyGym_iPad[10867:707] id salvada as NSINTEGER:: 1329955200

обратите внимание на значение 1329955200, этоправильно показано как целое число и строка перед сохранением,

и для проверки ответа я делаю:

  NSArray *studiantes = [Student all];


for ( Student *tud in studiantes) {
    NSLog(@"tu %@ ...%@",tud.studentName, tud.idRef );
}

так, с int 345, я вижу в журнале tu.idRef == 345

но с int из строки я вижу в журнале tu.idRef == -32384

, поэтому, если я сохраню строку, которая переходит к int, я получу ответ: -32384

edit:

Я подклассифицировал свой сгенерированный файл менеджера классов базовых данных, чтобы сохранить idRef как NSNumber

    studentData.idRef = [NSNumber  numberWithInt:idRef];

отредактируйте x2

, чтобы проверить журнал, который я делаю:

NSArray *studiantes = [Student all];


for ( Student *tud in studiantes) {
    NSLog(@"tu %@ ...%d",tud.studentName, [tud.idRef intValue]);
}

, но результат к этому: -32384 ,, для моего значения, приведенного к int,при сохранении из строки

, но с правильным значением 345 ,, при прямой отправке целого числа,

Ответы [ 2 ]

5 голосов
/ 25 февраля 2012

Вы должны поместить его в NSNumber:

NSNumber *idToSave = [NSNumber numberWithInteger:[self.resultsToDisplay integerValue]];

EDIT

На самом деле мы достигли максимального значения, решенного с помощью целочисленного поля 32.

2 голосов
/ 25 февраля 2012

int значения не могут быть объектами C id Objective.

Либо конвертируйте ваш int в NSString объект, либо, что еще лучше, используйте NSNumber объекты для хранения вашего значения int.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...