Обработка объекта с несколькими ModalViewControllers - PullRequest
0 голосов
/ 02 января 2012

Я представляю UINavigationController как ModalViewController.UINavigationViewController обрабатывает последовательность (навигацию) UIViewController s.С моим первым ModalViewController (MVC) я хочу создать новый экземпляр моего NSObject, который имеет несколько свойств.Это работает.

Теперь в каждом VC у меня есть ползунок, чтобы изменить одно из нескольких свойств моего объекта.На последнем VC я хочу сохранить объект.

Я использую CoreData (который уже работает, когда я работаю с all свойств в one VC).

Есть ли простой способ добиться этого?

(я также использую NSNotificationCenter.)

РЕДАКТИРОВАТЬ:

  • В MVC1 я посылаю 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();
}
}

Ответы [ 2 ]

0 голосов
/ 02 января 2012

Передайте новый объект как свойство другим контроллерам модального представления. Управляемый объект содержит ссылку на контекст управляемого объекта, поэтому вы можете сохранить его в любой момент.

Итак, для каждого контроллера модального вида:

.h:

@property (nonatomic,weak) Object* newManagedObject;

.m:

@synthesize newManagedObject;

И перед тем, как представить каждый контроллер вида:

modalViewControllerX.newManagedObject = newManagedObject;

Настройте свой пользовательский интерфейс (установите значения ползунка и т. Д.) На viewWillAppear: примерно так:

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
0 голосов
/ 02 января 2012

В качестве совета вы можете использовать NSUserDefault для хранения и извлечения одних и тех же данных в разных представлениях, вы можете использовать NSUserDefaults из любого контроллера представления:

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults synchronize] 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...