我想将一个变量从viewcontroller传递到另一个我的方式 在第一个viewcontroller头文件中我声明了一个变量
1.H:
NSString * string;
并且在第二个viewcontroller我已经在我的2.m文件中导入了1.h,我调用变量的方式是
2.M:
NSString * string2 = 1.string
然而它返回错误可以有人教我怎么做,因为我没有在面向对象编程的强大基础,谢谢
答案 0 :(得分:1)
仅仅定义和声明两个字符串是不够的。这可以确保每个类都有一个名为string或string2的变量 - 但是当程序运行时,它是必须引用string1(或string2)的特定实例的实际对象。
这就像设计一个带信箱的房子 - 信箱就在房子的计划上,但是在特定信件发送到特定房屋之前没有任何事情发生。
你需要做的是连接你的类的实际实例,可能在init方法中,如下所示:
// 1.h
@interface ViewController1 : UIViewController
{
// declare our variable
NSString* string1;
}
// declare 'string1' as a property
@property (retain) NSString* string1;
// 1.m
// implements the property for string1
@synthesize string1;
// 2.h
@interface ViewController2 : UIViewController
{
// declare our variable
NSString* string2;
}
// declare 'string2' as a property
@property (retain) NSString* string2;
// 2.m
- (id)initWithTitle:(NSString*)aTitle andString1:aString
{
if (self = [super init])
{
self.title = aTitle;
self.string1 = aString;
}
return self;
}
然后在1.m中,您创建第二个控制器,然后将字符串连接起来,如下所示:
// 1.m
mySecondController = [[ViewController2 alloc] initWithTitle:@"Controller 2" andString:string1];
答案 1 :(得分:0)
虽然可以直接访问这样的成员变量(使用 - >运算符),但不建议这样做。
正确的方法是提供一个访问器来获取/设置您的成员变量。
在Objective-C 2.0(iPhone和OSX 10.5)中,您可以使用“property”关键字轻松完成此操作。作为属性语法的一部分,您还可以表达您希望如何处理“设置”对象。
保留 - 将释放上一个对象并保留新对象 copy - 将复制对象 assign - 将分配对象。
这些是基础知识,我建议你阅读更多关于属性的内容。
下面显示了如何在示例中使用属性。请注意,因为我们正在处理NSString,它是一个NSObject派生类,所以我们使用“retain”选项来确保正确更新引用计数。
// 1.h
@interface ViewController1 : UIViewController
{
// declare our variable
NSString* _string;
}
// declare 'string' as a property
@property (retain) NSString* string;
// 1.m
// implements the property for string
@synthesize string = _string;
// constructor for ViewController1
-(id)initWithNibName:(NSString *)nibName bundle:(NSBundle *)nibBundle {
if (self = [super initWithNibName: name bundle: bundle]) {
// Initialize the string here.
self.string = @"Hello World";
}
}
// 2.m
NSString* oldString = view.string;
view.string = @"New String";