2012-08-11 80 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

相关问题