簡體   English   中英

tableView中奇怪的BOOL行為(何時1不等於1?)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM