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

相关问题