使用多个ModalViewControllers处理对象

时间:2012-01-02 10:32:51

标签: ios cocoa-touch uiviewcontroller uinavigationcontroller

我将UINavigationController作为ModalViewController呈现。 UINavigationViewController处理(导航)UIViewController的segue。使用我的第一个ModalViewController(MVC),我想创建一个具有多个属性的NSObject的新实例。这很有效。

现在在每个VC中我都有一个滑块来改变我对象的几个属性之一。在最后一个VC我想保存对象。

我正在使用CoreData(当我使用一个 VC中的所有属性时已经可以使用)。

是否有 easy 方法来实现这一目标?

(我也在使用NSNotificationCenter。)

修改

  • 在MVC1中,我按NSNotification中的DetailTableViewControllerNext发送UINavigationBar。 MVC1推向MVC2。
  • 当DTVC收到NSNotificationself insertNewObject:时(标准的Apple CoreData方法)这个方法有效,我在解除了UITableView之后看到了该对象的新实例MVControllers。

  • MVC2有UISlider我希望存储在我的对象中的值。所以我做了#import "Object.h", @property (nonatomic, weak) Object * detailItem, @sythesize detailItem并使用detailItem.property = NSNumber initWithInt etc.存储了某个值。我按Next。 MVC2推向MVC3。

  • MVC3也有#imported ... and @property ...。它在viewDidLoad: NSLog(@"%i", [detailItem.property intValue]);中显示,并显示0而不是myInteger。我做错了什么?

修改

为使这段代码有效,需要进行哪些更改?

ModalViewController

- (void)setDetailItem:(Object *)newDetailItem
{
if (_detailItem != newDetailItem) {
    _detailItem = newDetailItem;

    // Update the view.
    [self configureView];
}
}

MasterViewController

- (void)insertNewObject
{
NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
NSEntityDescription *entity = [[self.fetchedResultsController fetchRequest] entity];
NSManagedObject *newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context];

[newManagedObject setValue:@"New Object" forKey:@"name"];
[self.firstAssistantViewController setDetailItem:(Object *)newManagedObject];

// Save the context.
NSError *error = nil;
if (![context save:&error]) {
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    abort();
}
}

2 个答案:

答案 0 :(得分:0)

作为建议,您可以使用NSUserDefault在不同视图中存储和检索相同的数据,您可以使用任何视图控制器中的NSUserDefaults

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults synchronize] 

答案 1 :(得分:0)

将新对象作为属性传递给其他模态视图控制器。托管对象包含对托管对象上下文的引用,因此您可以随时保存。

因此,对于每个模态视图控制器:

·H:

@property (nonatomic,weak) Object* newManagedObject;

的.m:

@synthesize newManagedObject;

在您呈现每个视图控制器之前:

modalViewControllerX.newManagedObject = newManagedObject;

viewWillAppear:上配置您的UI(设置滑块值等),如下所示:

self.slider.value = self.newManagedObject.property;

当滑块值更改时,使用反向更新托管对象:

self.newManagedObject.property = self.slider.value;

在最终视图控制器中,如果您希望保存在那里,可以执行以下操作:

NSError *error = nil;
[self.newManagedObject.managedObjectContext save:&error];
// Your own error checking goes here