我有这个幻灯片应用程序有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个评级,全部在不同的对象中。
我只是无法找出正确的代码位置,如果有任何...让这个工作! 提前谢谢。
答案 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)
答案 3 :(得分:0)
我的NSStrings在被分配后失去了价值我遇到了问题,感谢那些发布的人。