2013-05-09 73 views
0

我正在開發一個應用程序,它將從六個不同的視圖控制器收集數據,然後創建收集的數據的PDF摘要。我知道有兩種方法可以彙總多個屏幕上的信息,但兩者看起來都很麻煩,足以讓我有更好的方式。將ViewController數據加載到模型中

選項1 - 核心數據 - 使用NSManagedObjects然後獲取,添加並重新保存到下一個視圖控制器然後獲取...並重新保存...然後獲取並重新保存。最後獲取所有內容以構建PDF

選項#2 - 在視圖控制器之間傳遞數據。但似乎我必須將數據從當前的VC傳遞到下一個,然後我將不得不將相同的數據重新輸入到以下VC等等。也放棄辛苦。

當我調用該類時,是否有更簡單的方法來聚合此數據並將其傳遞給PDF? (顯然)相對較新iOS

感謝, 本

回答

1

有許多這樣做的方法,但一個方法是定義所有的視圖控制器可以訪問一個單獨的模型對象。例如,Model.h定義了兩個屬性,textarray

#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]; 

現在你可以設置或獲取textarray屬性,你的心臟的內容。例如

model.text = @"Hello, World"; 

很明顯,只是改變Model.h屬性是你想要的,而不是我一個字符串和一個數組的例子。

+0

+1完美。如果你將'sharedManager'改爲'sharedModel'以使用類的名字,這聽起來會很好。 – Anupdas 2013-05-09 07:36:34

+0

@Anupdas很好的建議。這是我在Xcode中的一個自動化片段,所以我只是剪切和粘貼,當然這是個好主意。我相應地更新了我的答案。 – Rob 2013-05-09 08:07:43

+0

謝謝!這做了訣竅,並且非常有幫助。也感謝你的明確解釋。 – user2330744 2013-05-10 03:33:47

1

我構建了一個類似於此的項目,其中幾個視圖控制器將信息添加到名爲estimatedItem的共享單例數據對象。我提出,從剛一個屬性(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"; 
相關問題