2013-05-09 3 views
0

Я работаю над приложением, которое будет собирать данные из шести разных контроллеров просмотра, а затем создавать сводку собранных данных в формате PDF. Я знаю два способа агрегирования информации с нескольких экранов, но оба они кажутся достаточно громоздкими, чтобы сделать меня более совершенным.Загрузка данных ViewController в модель

Вариант № 1 - Основные данные - используйте NSManagedObjects, затем выберите, добавьте и сохраните на следующем контроллере просмотра, затем извлеките ... и сохраните ... затем извлеките и сохраните. Наконец, вытащить все, чтобы построить PDF.

Вариант № 2 - Передача данных между контроллерами просмотра. Но мне кажется, что мне нужно передать данные с текущего VC на следующий, а затем мне придется повторно передать те же данные следующим VC и так далее. Также прекратите кропотливо.

Есть ли более простой способ для объединения этих данных и передачи его в PDF, когда я вызываю этот класс?

Я (очевидно) относительно новый для iOS.

Спасибо, Бен

ответ

1

Есть много способов сделать это, но один способ, чтобы определить объект синглтона модели, что все контроллеры зрения может получить доступ. Например, Model.h определяет два свойства, text и array:

#import <Foundation/Foundation.h> 

@interface Model : NSObject 

@property (nonatomic, strong) NSString *text; 
@property (nonatomic, strong) NSMutableArray *array; 

+ (instancetype)sharedModel; 

@end 

Model.m просто реализует sharedManager метод, который позволяет различным контроллерам, чтобы получить доступ к этой общей модели:

#import "Model.h" 

@implementation Model 

+ (instancetype)sharedModel 
{ 
    static id sharedMyModel = nil; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     sharedMyModel = [[self alloc] init]; 
    }); 
    return sharedMyModel; 
} 

@end 

Затем, если вид контроллер хочет использовать это, просто включите

#import "Model.h" 

в верхней части, а затем любой вид контроллер может получить доступ к модели с помощью:

Model *model = [Model sharedModel]; 

И теперь вы можете установить или получить text и array свойства содержимого вашего сердца. например

model.text = @"Hello, World"; 

Очевидно, что просто изменить свойства в Model.h быть все, что вы хотите, а не мой пример строки и массива.

+0

+1 Perfect. Было бы здорово, если вы измените 'sharedManager' на' sharedModel', чтобы хорошо сочетаться с именем класса. – Anupdas

+0

@Anupdas Хорошее предложение. Это один из моих автоматических фрагментов в Xcode, поэтому я просто вырезаю и вставляю, но, конечно, это хорошая идея. Я обновил свой ответ соответственно. – Rob

+0

Спасибо! Это сделало трюк и очень полезно. Спасибо также за ваше четкое объяснение. – user2330744

1

Я построил проект, который был похож на этот, где несколько контроллеров представлений добавили информацию в общий однопользовательский объект данных, называемый оценкой.Я сделал контроллер представления базы, что все мои просматривать контроллеры, унаследованные от этого только имели одно свойства (assessedItem) с перегруженным геттером для этого свойства:

-(AssessedItem *)assessedItem { 
    if (! _assessedItem) { 
     _assessedItem = [AssessedItem assessedItem]; 
    } 
    return _assessedItem; 
} 

В классе AssessedItem, у меня был этот метод один класса:

+ (id)assessedItem { 
    static AssessedItem *assessedItem = nil; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     assessedItem = [[self alloc] init]; 
    }); 
    return assessedItem; 
} 

класс AssessedItem имел кучу свойств, и от любого из контроллеров, вы могли бы установить эти свойства только используя обычный точечный синтаксис:

self.assessedItem.someProperty = @"whatever"; 
Смежные вопросы