我将UINavigationController
作为ModalViewController呈现。 UINavigationViewController
处理(导航)UIViewController
的segue。使用我的第一个ModalViewController(MVC),我想创建一个具有多个属性的NSObject
的新实例。这很有效。
现在在每个VC中我都有一个滑块来改变我对象的几个属性之一。在最后一个VC我想保存对象。
我正在使用CoreData(当我使用一个 VC中的所有属性时已经可以使用)。
是否有 easy 方法来实现这一目标?
(我也在使用NSNotificationCenter
。)
修改
NSNotification
中的DetailTableViewController
向Next
发送UINavigationBar
。 MVC1推向MVC2。当DTVC收到NSNotification
它self 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();
}
}
答案 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