2012-08-11 79 views
4

我正在嘗試決定設計模式。我有一個應用程序,用戶將一個條目添加到Core Data數據庫。他們還應該有能力在以後編輯該條目。兩個視圖基本上都顯示相同的數據,只有一個用於編輯已添加的內容。添加ViewController與編輯ViewController

我不知道我是否應該有兩個非常相似的獨立的視圖控制器或者我是否應該使用某種繼承來對此進行設置,或者如果有是我沒有想到的一些其他的想法。

我很欣賞你的意見。

+1

我會分享nib文件並創建兩個單獨的'UIViewController'子類。 – mAu 2012-08-11 23:07:46

+0

我主要把它當作編輯操作。在一種情況下,恰好正在編輯的信息是默認值...經常是空字符串。 – 2012-08-11 23:16:48

回答

3

我遇到過類似的項目解決,並最終與去使用相同的UIViewController做兩個操作。兩種用例基本相同:用戶輸入信息並保存。數據的驗證是一樣的,保存是一樣的,演示文稿是一樣的。它們僅取決於您的模型對象是否已經存在。請看下面的例子:

.h文件中:

@interface WHItemViewController : UITableViewController 

// This is the only attribute we really need to expose in our header 
// so that the presenting view controller can set the model object when editing 
@property (nontatomic, retain) WHItem* item; 

@end 

.m文件:

@interface WHItemViewController() 

// Other 'private' properties and methods 

- (void)didSelectSaveButton:(id)sender; 

@end 

@implementation WHItemViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    if (self.item) { // setup the UI with the model object, if present. 
     self.fooText.text = self.item.foo; 
     self.barText.text = self.item.bar; 
     self.bazText.text = self.item.baz; 
    } 
} 

- (void)didSelectSaveButton:(id)sender { 
    if (!self.item) { 
     WHItem* item = nil; 

     // create a new instance from your managed object context 
     // and set it to the item property 

     self.item = item; 
    } 

    self.item.foo = self.fooText.text; 
    self.item.bar = self.barText.text; 
    self.item.baz = self.bazText.text 

    NSError* error = nil; 
    [WHDataAccess sharedInstance].managedObjectContext save:&error]; 

    // Error handling, etc. 
} 

// Other methods 

@end 

這個視圖控制器的唯一目的是創建演示文稿編輯和保存模型對象數據。

+0

非常感謝!我喜歡這個設計...... – Jamie 2012-08-12 01:04:16

0

我用一個模式是這樣的:

#import "ItemViewController.h" 

@protocol AddItemViewControllerDelegate; 

@interface AddItemViewController : ItemViewController 
{ 
    id <AddItemViewControllerDelegate> delegate; 
} 
@property (nonatomic, assign) id <AddItemViewControllerDelegate> delegate; 

-(IBAction)cancel:(id)sender; 
-(IBAction)save:(id)sender; 
@end 

@protocol AddItemViewControllerDelegate 
    - (void)addItemViewController:(AddItemViewController *)controller didFinishWithSave: (BOOL)save; 
@end 

的AddItemController簡單子類,我使用的編輯和顯示現有對象的ItemViewController。

然後在執行我做這樣的事:

#import "AddItemViewController.h" 

@implementation AddItemViewController 
@synthesize delegate; 

-(void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    ... 
    // Set up the undo manager and set editing state to YES. 
    [self setUpUndoManager]; 
    self.editing = YES; 
} 

-(void)viewDidUnload 
{ 
    [self cleanUpUndoManager]; 
    [super viewDidUnload]; 
} 

-(IBAction)cancel:(id)sender 
{ 
    [delegate addItemViewController:self didFinishWithSave:NO]; 
} 

-(IBAction)save:(id)sender 
{ 
    [delegate addItemViewController:self didFinishWithSave:YES]; 
} 

// ... other stuff. 

@end 
2

我在同樣的情況是,我用兩個一個視圖控制器。如果我傳遞一個實體,它將編輯該實體。如果我不這是一個新的實體。在viewDidLoad中,我檢查是否設置了實體,如果不是,我創建一個實體。然後我繼續填寫文本框和其他信息。如果它是一個新實體,屬性將爲空或具有默認值,我的視圖控制器中的視圖也是如此。當用戶準備就緒時,我不必檢查是否更新或插入,因爲實體已經插入到開始位置。

+0

非常感謝。我正在用這種設計方法。 – Jamie 2012-08-12 01:03:33

相關問題