2012-02-25 63 views
1

我在我的應用程序上使用核心數據好吧,核心數據未正確保存整數?當從NSString更改爲int

保存一個應該是整數的數字時遇到問題...當我從Core Data中獲取它時,顯示奇怪的數字值

我知道工作,因爲,與測試,讓我的idTosave = 345,它顯示CoreData的結果,但發送值[字符串到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); 
} 

如此,與詮釋345,我看到日誌 tu.idRef == 345

但與int f ROM串,我看到日誌 tu.idRef == -32384

所以如果我從字符串去詮釋保存,我得到我的迴應:-32384

編輯:

我有我的子類生成的核心數據類管理文件,對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 ,,時只是直接發送一個int,

+0

因此,如果僅僅爲了測試我發送一個int :: 345,它保存得很好,如果發送一個NSString的intValue,這是行不通的,,,,我不得不爲的是送一個int什麼我的類設計用,謝謝 – MaKo 2012-02-25 14:04:01

回答

5

你必須把它放在一個的NSNumber:

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

編輯

其實我們已經達到最大值,與整數32場解決。

+0

您好,感謝,但我發送一個詮釋,並在我的實體類我改變的int的NSNumber,請參閱編輯我的問題結束,感謝 – MaKo 2012-02-25 14:01:42

+0

好,我看到的。什麼是resultsToDisplay類? – Franck 2012-02-25 14:05:30

+0

如果你在一個sqlite3的數據庫保存,你可以嘗試直接與終端來訪問數據庫,看看它是否正確保存。讓您的數據庫的路徑與此代碼:NSURL * storeURL = [[自我applicationDocumentsDirectory] ​​URLByAppendingPathComponent:@ 「yourDB.sqlite」]; NSLog(@「Core Data store path = \」%@ \「」,[storeURL path]); – Franck 2012-02-25 14:16:37

2

int值不能爲Objective C id對象。

要麼轉換你intNSString對象,或者比這更好的,使用NSNumber對象來包含你的int值。

+0

您好,感謝,但是我已經在使用的NSNumber保存到核心數據我INT,請參閱編輯工作,也可以是什麼呢? – MaKo 2012-02-25 13:55:51

+0

如果你現在將它保存爲'NSNumber'這很好。不過,你如何加載並在你的'NSLog'調用中打印呢?嘗試'的NSLog(@「屠%@ ......%d」,tud.studentName,[tud.idRef的intValue]);' – 2012-02-25 14:04:24

+0

您好感謝,請檢查是否有新的編輯的問題,我在那裏顯示日誌的一端使用%d,謝謝 – MaKo 2012-02-25 14:14:06