1

我正在使用NSUserDefault(用戶默認值)來確定「Lists Sort Ascending」 - 從我的核心數據棧中使用NSFetchedResultsController - 按升序排序或不排序。使用OR ||運算符在if語句中以評估變量(不等於兩(2)個字符串)

例如:

NSSortDescriptor *sortDescriptorPrimary = [NSSortDescriptor sortDescriptorWithKey:self.sortAttributePrimary ascending:listsSortAscending selector:@selector(compare:)]; 

無論用戶設置的,有兩個實體指此值總是爲真即BOOL listsSortAscending = YES;,具體而言,按字母順序排序的列表,諸如聯繫人列表。

下面這句話的代碼是試圖解釋什麼,我試圖實現...

BOOL listsSortAscending = YES; 
if ((![self.entity isEqualToString:@"Contact"]) || (![self.entity isEqualToString:@"TypeChild"])){ 
    listsSortAscending = [self.userDefaults boolForKey:kListsSortAscending]; 
} 
從那些總是被排序 ascending:YES這兩個實體名單

除此之外,其他實體會根據用戶默認值listsSortAscending排序。

此代碼不起作用,但我似乎無法解決正確的語法。

我已經閱讀了很多堆棧溢出和其他頁面,包括Objective-C IF statement with OR condition,但我似乎無法解決這個惱人的語法!

下面的代碼確實有效,但是我的強迫性特徵今天運行得很好,我想用OR運算符||來學習正確的語法。

BOOL listsSortAscending = YES; 
if (![self.entity isEqual:@"Contact"]) { 
    if (![self.entity isEqual:@"TypeChild"]) { 
     listsSortAscending = [self.userDefaults boolForKey:kListsSortAscending]; 
    } 
} 

有什麼建議嗎?

+1

您的第一個代碼檢查「實體!=聯繫OR實體!= TypeChild」,第二個檢查「實體!=聯繫和實體!= TypeChild」... –

+0

感謝@MartinR,完全錯過了它。 – andrewbuilder

回答

1

我想你想:

if ((![self.entity isEqualToString:@"Contact"] && ![self.entity isEqualToString:@"TypeChild"])) { 

這是不是真的有語法的東西,它是一個否定的東西。有時,指定正面案例而不是負面案例會更容易。但是,嵌套if s的第二部分代碼實際上是&&而不是||

+0

謝謝@Wain,完全錯過了它。您建議的代碼示例完美無缺。現在瞭解,而不是語法的東西。否定使我完全困惑。 – andrewbuilder

相關問題