if语句无法访问NSString值

时间:2014-01-11 17:13:46

标签: ios nsstring

我有这个幻灯片应用程序有3个图像,我在我的.h文件中设置了一些字符串,我试图获得存储在核心数据中的3个图像的评级。

我已经编写了存储它的代码,我知道它有效,我的问题是,对于前两个图像,我必须在最终图像之外的代码中包含要停止的代码。将评级保存到核心数据。

因为它们不在stoplideshow代码中,所以设置为rating1和rating2的值不会传输到第二个if语句。一旦你看到下面的代码,我希望这一切都有意义......

我发现了另一个与此类似的问题,它说你需要首先在两个if语句之外声明字符串,但这对我没用。

- (void) SlideShowEngineDidNext:(SlideShowEngine *)slideShow {
countImg += 1;

// If no rating selected on first or second image then set rating to "Null"
if ((_slideshow.currentIndex == 1) || (_slideshow.currentIndex == 2)) {
    if (_Sam1.enabled == YES || _Sam2.enabled == YES || _Sam3.enabled == YES || _Sam4.enabled == YES || _Sam5.enabled == YES) {
        rating = @"Null";
        NSLog(@"SlideShowEngineDidNext, index: %d\nUser did not rate.\nRating: %@", slideShow.currentIndex, rating);
    } else {
        if (_slideshow.currentIndex == 1) {
            _rating1 = rating;
        }
        if (_slideshow.currentIndex == 2) {
            _rating2 = rating;
        }
        NSLog(@"SlideShowEngineDidNext, index: %d\nRating: %@", slideShow.currentIndex, rating);
    }
}

if (countImg == slideShow.images.count) {
    // If user didn't select a rating on last image then set the rating to "Null"
    if (_slideshow.currentIndex == 0) {
        if (_Sam1.enabled == YES || _Sam2.enabled == YES || _Sam3.enabled == YES || _Sam4.enabled == YES || _Sam5.enabled == YES) {
            rating = @"Null";
            NSLog(@"SlideShowEngineDidNext, index: %d\nUser did not rate.\nRating: %@", slideShow.currentIndex, rating);
        } else {
            _rating3 = rating;
            NSLog(@"SlideShowEngineDidNext, index: %d\nRating: %@", slideShow.currentIndex, rating);
        }
    }

    // Stop the slideshow
    [_slideshow stop];

    // Display alert to end slideshow
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Survey Completed!" message:@"Press OK to exit!" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alert show];

    NSLog(@"rating1: %@", _rating1);
    NSLog(@"rating2: %@", _rating2);
    NSLog(@"rating3: %@", _rating3);
    // Save ratings
    AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
    NSManagedObjectContext *context = [appDelegate managedObjectContext];
    NSManagedObject* currentSurvey = [NSEntityDescription insertNewObjectForEntityForName:@"Ratings" inManagedObjectContext:context];
    self.currentSurvey = currentSurvey;

    [[self currentSurvey] setValue:_rating1 forKey:@"image1"];
    [[self currentSurvey] setValue:_rating2 forKey:@"image2"];
    [[self currentSurvey] setValue:_rating3 forKey:@"image3"];

    NSError *error;
    [[[self currentSurvey] managedObjectContext] save:&error];
}
}

从NSLogs获得评级1,2和3我将从中得到:

2014-01-11 17:06:35.145 Lab10 - Multimedia[41533:70b] rating1: (null)
2014-01-11 17:06:35.145 Lab10 - Multimedia[41533:70b] rating2: (null)
2014-01-11 17:06:35.146 Lab10 - Multimedia[41533:70b] rating3: 5

所以从带有currentIndex 1和currentIndex2的if语句中,字符串被赋予它们的值,但它没有转移到幻灯片结束并保存数据的第二个if语句。

如果我尝试将数据保存在结束if语句之外,那么它只保存第一个评级,然后是第一个和第二个,然后是所有3个评级,全部在不同的对象中。

我只是无法找出正确的代码位置,如果有任何...让这个工作! 提前谢谢。

4 个答案:

答案 0 :(得分:0)

每次运行此代码时,您都会创建一个新的NSManagedObject,实际上是数据库中的新行。这是你的意图吗?

其次,您没有在保存中捕获错误。这是不好的。可能会发生错误,您不会知道它。

您是否在调试器中浏览了此代码并检查了每个值?上下文是!nil吗?

在尝试遵循条件逻辑时,似乎有很多州没有捕获,我怀疑这是导致nil值的原因。您确实需要在调试器中逐行浏览,并观察代码正在执行的操作。

答案 1 :(得分:0)

您的字符串分配只是始终指向相同的内存地址,因此每当您更改rating的值时,任何分配也会发生变化。尝试使用以下字符串分配

_rating1 = [NSString stringWithString:rating];

_rating2 = [NSString stringWithString:rating];

_rating3 = [NSString stringWithString:rating];

在此处详细了解Objective-C字符串http://www.techotopia.com/index.php/Working_with_String_Objects_in_Objective-C

答案 2 :(得分:0)

OP提供了这些答案:

Found the answer here

我的NSStrings在被分配后失去了价值我遇到了问题,感谢那些发布的人。

答案 3 :(得分:0)

Found the answer here

我的NSStrings在被分配后失去了价值我遇到了问题,感谢那些发布的人。