[英]Strange BOOL behavior in tableView (When is 1 not equal to 1?)
我正在嘗試將現有應用程序轉換為使用核心數據。 我已經設置了實體,並且正在使用NSFetchedResultsController在表視圖中顯示數據。 現在,我只是在每次啟動應用程序時填充數據庫。
除了一個奇怪的問題之外,它似乎運行良好。 我的實體具有BOOL值“ showStarCorner”,該值確定是否應在表格單元格中顯示星星的圖像...因此,在配置每個表格視圖單元格時,我調用類似於以下if語句的東西:
if (myObject.showStarCorner == [NSNumber numberWithBool:YES]) {
// show the star corner
}
但是令人驚訝的是,這導致星星只顯示在我在應用啟動時創建的對象上。 (在應用的先前啟動中添加的應該顯示星星的對象沒有)
我添加了一個額外的測試,以幫助找出問題所在:
if (myObject.showStarCorner == [NSNumber numberWithBool:YES]) {
NSLog(@"%@ == %@", myObject.showStarCorner, [NSNumber numberWithBool:YES]);
}
else if (myObject.showStarCorner != [NSNumber numberWithBool:YES]) {
NSLog(@"%@ != %@", myObject.showStarCorner, [NSNumber numberWithBool:YES]);
}
...這將導致為先前添加的對象調用else語句:
1 != 1
據我所知,1應該總是等於1 ...所以我完全困惑。
我將不勝感激任何幫助。 可能與每次應用啟動時創建的具有相同屬性的新對象有關嗎? (我沒有分配任何唯一的ID或任何東西,只是按添加日期對結果進行排序)
NSNumber*
變量是指針,指針上的==
檢查指針是否相等。 由於您的對象不共享相同的內存位置(因為它們是通過[NSNumber numberWithBool:]
的不同調用創建的),因此它們不被視為等於指針的指針(因此,比較返回NO
)。
請改用isEqual:
方法,該方法應檢查值是否相等並且在大多數類中都可用,或者從您的NSNumber
對象中獲取boolValue
並進行比較。
if (myObject.showStarCorner.boolValue == YES) {
// show the star corner
}
if ([myObject.showStarCorner isEqual:[NSNumber numberWithBool:YES]]) {
// show the star corner
}
不能僅僅因為對象指向相同的數據就保證它們相等。 您需要使用-isEqual:方法測試是否相等,而不是==:
if ([myObject.showStarCorner isEqual: [NSNumber numberWithBool: YES]) {
//show the star corner
}
比較BOOL
原語:
if ([myObject.showStarCorner boolValue] == YES) {
// Alternatively,
if ([myObject.showStarCorner boolValue]) {
否則,您將嘗試比較不同的NSNumber
對象的內存地址,這是行不通的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.