我有3个场景,每个场景收集用户的输入。每个场景有5个UITextFields。第四个场景显示了UITableView中的所有15个文本字段。
我不确定这样做是否是最好的方法,但我有以下场景1的代码:
//Meetings is NSManagedObject class. Meetings.h and .m was created from the Meetings entity from Core Data
//I have this code once in the file right before I start saving the data
Meetings *meetings = (Meetings *) [NSEntityDescription insertNewObjectForEntityForName:@"Meetings" inManagedObjectContext:self.managedObjectContext];
// I have similar code below for each user's input.
NSString *date = [[NSString alloc] initWithFormat:@"%@", [dateFormatter stringFromDate:selectedDate]];
DateLabel.text = date;
[meetings setDateLabel:date];
...
[meetings setTimeLabel:time];
..
//Code below is to save. I have this once at the end of the file to save the data
NSError *error = nil;
if (![managedObjectContext save:&error]) {
// Handle the error.
}
//The log below shows the saved data fine. Thus, the data is being saved in managnedObjectContext.
NSLog (@"This is the DateLabel %@", meetings.DateLabel);问:如何访问场景2和3中的指针*会议,以保存managedObjectContext中的其余字段?
//In Scene 2 viewDidLoad method I did the following to check:
self.managedObjectContext = [(STAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];
Meetings *meetings = (Meetings *) [NSEntityDescription insertNewObjectForEntityForName:@"Meetings" inManagedObjectContext:self.managedObjectContext];
NSLog (@"This is the DateLabel from Scene 2 %@", meetings.DateLabel);日志显示:
2013-02-11 18:04:05.447 MyApp[3505:c07] This is the DateLabel from Scene 2 (null)发布于 2013-02-12 10:15:51
您需要将指向会议对象的指针从前一个屏幕向前传递到下一个屏幕,方法是将它们存储在一个属性中,或者您可以传递对象的id,并根据需要在最后一个屏幕上获取它们。
假设下面的代码反映了你的代码。类名可能不完全相同,但我认为您可以根据需要更改它们。
场景1头文件:
//
// Scene1ViewController.h
// ... etc.
#import <UIKit/UIKit.h>
#import "Meetings.h"
@interface Scene1ViewController : UIViewController
@property (nonatomic, strong) Meetings *meetingsForScene1;
// ... etc.
@endScene 2头文件:
//
// Scene2ViewController.h
// ... etc.
#import <UIKit/UIKit.h>
#import "Meetings.h"
@interface Scene2ViewController : UIViewController
@property (nonatomic, strong) Meetings *meetingsFromScene1;
@property (nonatomic, strong) Meetings *meetingsForScene2;
// ... etc.
@endmeetingsForScene2可能适合也可能不适合,这取决于您的要求。您可以只将数据从Scene2添加到meetingsFromScene1,然后将该实例传递给下一个场景。
Scene 1实现的 -prepareForSegue:sender:**:**
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
UIViewController *destinationViewController = segue.destinationViewController;
if ([segue.identifier isEqualToString:@"YourSegueIdentifierForTransistionFromScene1ToScene2"]) {
Scene2ViewController *scene2 = [destinationViewController isKindOfClass:[Scene2ViewController class]] ? (Scene2ViewController *)destinationViewController : nil;
NSAssert(scene2, @"scene2 should not be nil");
NSAssert(self.meetingsForScene1, @"self.meetingsForSecen1 should not be nil");
scene2.meetingsFromScene1 = self.meetingsForScene1;
}
}注您可能在Scene2上有两个属性。一个用于当前场景的数据,另一个用于上一个场景的数据。重要的属性是保存前一个场景中的数据的属性。Scene1中的-prepareForSegue:sender:方法适合将Scene1的数据设置为Scene2上的属性。
我已经包含了一些NSAssert调用来做一些检查。考虑在您的生产代码中删除这些代码。另外,请注意在分配*scene2时的检查。如果您的目标控制器不是正确的“类型”,您将立即发现。
我不一定鼓吹这种方法是你的问题的“最佳”,但这种方法至少会提供一条解决方案的途径,如果不能完全解决问题的话。
发布于 2013-02-12 10:17:06
那么,您在viewDidLoad方法中所做的就是在NSManagedObjectContext实例中创建一个新对象。
您应该做的是为以前创建的会议对象发出一个fetch请求。
也许你应该读一读关于核心数据的教程。下面的代码非常容易理解:http://www.raywenderlich.com/934/core-data-on-ios-5-tutorial-getting-started
https://stackoverflow.com/questions/14824263
复制相似问题