我需要将一些数据传递给以前的视图控制器,我的代码有什么问题?在这段代码中“contactViewController”是我的第一个视图控制器,“groupViewController”是我的第二个视图控制器
ContactEditVC.h(firstViewController)
#import "GroupEditTVC.h"
@interface ContactEditVC : UIViewController <SecondViewControllerDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate> {
UIImageView * imageView;
UIButton * choosePhotoBtn;
UIButton * takePhotoBtn;
UIButton * btnGroup;
}
@property (nonatomic, strong) NSString *groupName;
ContactEditVC.m(firstViewController)
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if([[segue identifier] isEqualToString:@"selectGroup"]){
//get selected contact
//pass selected contact to MyContactAppViewController for editing
GroupEditTVC *destViewcontroller=segue.destinationViewController;
destViewcontroller.delegate=self;
}
}
-(void)viewWillAppear:(BOOL)animated
{
self.txtFname.text=groupName;
}
- (void)dataFromController:(NSString *)data
{
groupName=data;
}
在我的第二个视觉控制器中:
@protocol SecondViewControllerDelegate <NSObject>
- (void)dataFromController:(NSString *)data;
@end
@interface GroupEditTVC : UITableViewController <UIAlertViewDelegate>
@property (retain) id <SecondViewControllerDelegate> delegate;
@end
GroupEditTVC.m(secendViewController)
#import "ContactEditVC.h"
@interface GroupEditTVC ()
@end
@synthesize delegate;
- (IBAction)donePressed:(id)sender {
[[self delegate]dataFromController:@"blabla"];
[self dismissViewControllerAnimated:YES completion:nil];
}
还有其他方法可以传回数据吗?
答案 0 :(得分:0)
您应该尝试关注模型视图控制器。在我的应用程序中,我通常传递对Model类的引用,该类包含我想要共享和更改的大量数据。如果将模型引用传递给GroupEditTVC并更改该屏幕中的数据,则更改的数据可供“root”视图控制器使用,该控制器也具有对相同数据的引用。唯一需要的是“root”视图用新数据刷新它的视图。
因此您不需要传回任何内容,只需更新编辑视图和主视图都具有引用的Model类。
这个想法是绕过传递字符串和其他“松散耦合”的数据,然后只对一个包含所有相关数据的可靠数据对象进行操作。当您开始使用AFNetworking / Mantle / etcetera时,这也更容易。您只需保存整个数据类,您就不必担心每一小块数据。
因此,对松散字符串的所有引用都应该替换为此对象内的字符串。
-(void)viewWillAppear:(BOOL)animated {
self.txtFname.text = self.contact.name;
}
// class that holds the data
@interface Contact : NSObject // Nothing special, just an object
@property NSInteger contactId;
@property NSString *name;
// You can add basically any data here
@end
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if([[segue identifier] isEqualToString:@"selectGroup"]){
//pass selected contact to MyContactAppViewController for editing
GroupEditTVC *destViewcontroller=segue.destinationViewController;
destViewcontroller.contact = self.contact; // Adds reference to the same class
}
}
- (IBAction)donePressed:(id)sender {
self.contact.name = self.name.text; // get new name from text box
[self dismissViewControllerAnimated:YES completion:nil];
}