2012-10-27 70 views
0

好吧,我有一个小程序,它具有以下文件;
- HomeViewController(.H .M的.xib)
- DataViewController(.H .M的.xib)
- 的AppDelegate(.H .M)
- 人(.H .M)[对象]
+支持文件等...
在视图控制器之间共享对象实例

假设我通过HomeViewController中的文本框和其他输入获取用户输入,并将它们设置为Person(年龄,年级等)的实例的属性,我如何从DataViewController访问它们(同一实例)以显示它们?

下面是代码HomeViewController.h片段和.M
.H

@interface HomeViewController : UIViewController { 

    IBOutlet UIButton *done; 

    BOOL standardRes; 
} 

@property (nonatomic) int newAge; 
@property (nonatomic) int newGrade; 

-(IBAction)doneButtonPressed; 

@end 

.M

@implementation HomeViewController 
@synthesize newAge, newGrade; 

-(IBAction)doneButtonPressed{ 
    Person *user = [[Person alloc]init]; //Creating an instance of Person called user 
    user.age = newAge; //Do I even need this if I use setters and getters in person.m? 
    user.grade = newGrade; //Do I even need this if I use setters and getters in person.m? 
    NSLog(@"Age: %i, Grade: %i", user.age, user.grade); //Testing with NSLog 

    newAge = 175; 
    [user setAge:(int)newAge]; //Calling setter method for property 'age' in Person.m 

    DataViewController *vc = [[DataViewController alloc]init]; 
    [self.navigationController pushViewController:vc animated:YES]; 
} 

这里是Person.h和一点点。 m

@interface Person : NSObject { 

} 

@property (nonatomic, getter = age, setter = setAge:) int age; 
@property (nonatomic) int grade; 

@end 


@implementation Person 
@synthesize age, grade; 

-(void)setAge: (int) newAge { 
    age = newAge; 
} 

-(int)age { 
    return age; 
} 

@end 


注:
- 使用导航控制器
- iOS 6的
- 的Xcode 4.5.1
+如果您需要任何更多的信息,让我知道! :)

P.S.我有点新的这个东西所以这可能是一个愚蠢的问题;)

回答

2

而不是

DataViewController *vc = [[DataViewController alloc]init]; 

创建自己的初始化,并通过在一个Person对象。即

DataViewController.h

- (id)initWithPerson:(Person*)person; 

// Need a way to store it, either through a property 
@property (nonatomic, strong) Person* person; 

DataViewController.m

// Or you can store it as an instance variable, via Class Extension 
@interface DataViewController() { 
    Person* m_person; 
} 
@end 

// Either way you store it, do it here 
-(id)initWithPerson:(Person*)person { 
    self = [super init]; 
    if (self) { 
     self.person = person; 
     // OR 
     m_person = person; 
    } 
    return self; 
} 

HomeViewController.m

-(IBAction)doneButtonPressed { 
    Person *user = [[Person alloc]init]; //Creating an instance of Person called user 
    user.age = newAge; //Do I even need this if I use setters and getters in person.m? 
    user.grade = newGrade; //Do I even need this if I use setters and getters in person.m? 
    NSLog(@"Age: %i, Grade: %i", user.age, user.grade); //Testing with NSLog 

    newAge = 175; 
    [user setAge:(int)newAge]; //Calling setter method for property 'age' in Person.m 

    DataViewController *vc = [[DataViewController alloc]initWithPerson:user]; 
    [self.navigationController pushViewController:vc animated:YES]; 
} 
+0

我试图左右逢源,但对你HomeViewController.h改了行说有语法错误:“DataViewController”不可见@interface声明的选择“initWithPerson:” – WillB

+0

错字:HomeViewController.m ...对不起:P – WillB

+0

我很抱歉@WillB,我混了文件名。看我的编辑。 – WDUK

0

我可以想到一些方法来做到这一点。

1-创建某种在你HomeViewController将包含人的容器或对象列表 然后,您可以拨打DataViewController此列表,使用get()方法来得到你想要的

2-人如果你只需要一个人在你的应用程序(如果您的应用程序需要多个人的对象,这将无法正常工作),你可以把人一个单,然后每一次尝试在你的程序会首先检查是否有创建一个Person对象此对象的实例已经存在,如果不存在,将返回一个新的实例,但在人的对象已存在,只是返回你现有的人的情况下。

Here是单身百通的解释和示例代码

+0

所以,如果我想使用Singleton模式,我会怎么做呢?这些例子是在java中,我很难将其转换为我的应用程序。 – WillB

相关问题