Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios “如果”语句_Ios_Objective C_If Statement - Fatal编程技术网

Ios “如果”语句

Ios “如果”语句,ios,objective-c,if-statement,Ios,Objective C,If Statement,我有一个if例程,它使用| |运算符将一个值与另外两个值进行比较,如果语句的计算结果为YES,则值firstActivity.stopTime应该从null更改为当前时间[NSDate] 然而,它的评估结果似乎为“否”,导致没有任何变化,尽管我的NSLog读数和我自己的观察结果似乎证实它必须评估为“是” 代码如下: -(void) compareActivity { NSManagedObjectContext *localContext = [NSManagedObjectContex

我有一个if例程,它使用| |运算符将一个值与另外两个值进行比较,如果语句的计算结果为YES,则值firstActivity.stopTime应该从null更改为当前时间[NSDate]

然而,它的评估结果似乎为“否”,导致没有任何变化,尽管我的NSLog读数和我自己的观察结果似乎证实它必须评估为“是”

代码如下:

-(void) compareActivity
{
    NSManagedObjectContext *localContext = [NSManagedObjectContext MR_contextForCurrentThread];
    TimedActivity *firstActivity = [TimedActivity MR_findFirstOrderedByAttribute:@"startTime" ascending:NO];

    NSLog(@"1 Currently timed activity is %@",firstActivity.name);
    NSLog(@"2 thisSpec.activityOfInterest is %@",self.thisSpec.activityOfInterest);
    NSLog(@"3 Currently timed activity stopTime is %@",firstActivity.stopTime);
    NSLog(@"4 thisSpec.benchmarkActivity is %@",self.thisSpec.benchmarkActivity);

    if (firstActivity.name == self.thisSpec.activityOfInterest || firstActivity.name == self.thisSpec.benchmarkActivity)
    {
        firstActivity.stopTime = [NSDate date];
        [localContext MR_saveToPersistentStoreAndWait];
        NSLog(@"5 Currently timed activity stopTime is %@",firstActivity.stopTime);
    }
    NSLog(@"6 Currently timed activity stopTime is %@",firstActivity.stopTime);
}
以下是控制台的读数:

2014-04-28 22:15:06.588 WMDGx[5683:a0b] 1 Currently timed activity is Test 1
2014-04-28 22:15:06.588 WMDGx[5683:a0b] 2 thisSpec.activityOfInterest is Test 1
2014-04-28 22:15:06.589 WMDGx[5683:a0b] 3 Currently timed activity stopTime is (null)
2014-04-28 22:15:06.589 WMDGx[5683:a0b] 4 thisSpec.benchmarkActivity is Test 2
2014-04-28 22:15:06.589 WMDGx[5683:a0b] 6 Currently timed activity stopTime is (null)
有什么想法或建议吗

谢谢

更新:

我更新了我的代码:

if ([firstActivity.name isEqualToString:self.thisSpec.activityOfInterest] || [firstActivity.name isEqualToString:self.thisSpec.benchmarkActivity])
{
    firstActivity.stopTime = [NSDate date];
    [localContext MR_saveToPersistentStoreAndWait];
    NSLog(@"5 Currently timed activity stopTime is %@",firstActivity.stopTime);
}
现在它工作得很好!有趣的是,不久前我也遇到过同样的问题,实际上我尝试过修改代码,但这次我显然做错了什么,让我觉得这是错误的方法

非常感谢

不能使用==来比较对象指针,需要使用来比较对象指针

[firstActivity.name isEqual: self.thisSpec.activityOfInterest] || [firstActivity.name isEqual: self.thisSpec.benchmarkActivity]

如果它们是NSString,您可以使用

使用isEqualTo:而不是==。

您必须将==更改为isEqualToString:

if ([string1 isEqualToString:string2]){}

==对于非原语,如NSString,只比较指针的内存地址,这肯定不是您想要的。

如果您使用指针,则需要将==转换为[isEqual:]以验证对象

if (firstActivity.name isEqual self.thisSpec.activityOfInterest || firstActivity.name isEqual self.thisSpec.benchmarkActivity)
{
    firstActivity.stopTime = [NSDate date];
    [localContext MR_saveToPersistentStoreAndWait];
    NSLog(@"5 Currently timed activity stopTime is %@",firstActivity.stopTime);
}

如果您使用的是firstActivity.name和self.thisSpec.activityOfInterest是NSString,那么您需要使用[IseQualtString:][/p>验证其他人是否给出了正确答案。这是解释

Objective-C通过将对象置于指针之外,将对象移植到C上。你所说的NSString*并不是一个正式的字符串,它是一个指向字符串的指针,也就是说,它是字符串所在的内存地址。它描述字符串的标识,而不是值

因此,当您使用==时,您是按标识而不是按值进行比较。你在问这两个指针指向同一事物的描述吗

你真的想问这些指针末尾的两件事是否有相同的值

你可以用IsIt实现这一点:因为大多数基础对象和许多其他对象都实现了将它们的值与参数的值进行比较的方法。


旁白:身份平等意味着价值平等,但反之则不然;在您自己的代码中实现isEqual时,一个常见的第一个测试是检查标识,并且可能在不检查值的情况下返回YES

@BryanChen但它可以用于它实际上是isEqual的:所以您比较字符串值更好,您可以使用类似于[firstActivity.name IseQualtString:self.thisSpec.activityOfInterest]|的东西[firstActivity.name isEqualToString:self.thisSpec.benchmarkActivity]我感谢您的深入回答!请参阅上面我的更新以了解我以前答案的实现。谢谢!请参阅上面我的更新以了解我以前答案的实现。谢谢!请参阅上面我的更新以了解我以前答案的实现。