无法将数据放入全局变量

时间:2014-02-24 03:09:25

标签: ios objective-c uitableview scope global-variables

我有几个需要访问相同变量的方法实现。例如,我有一个变量,我将用户的名字放在其中,我需要能够在同一个View Controller中的所有各种方法实现中访问此变量。

我创建了一个名为“PotentialFriend”的自定义类,它是NSObject的子类。 PotentialFriend的头文件还包含一个名为“name”的NSString属性。

在我的视图控制器的头文件中,我创建了一个名为“potentialFriend”的PotentialFriend类的实例。我可以在View Controller的主文件中成功输入“_potentialFriend.name”,但是如果我把它设置为类似于@“Steve”的东西,它在控制台中显示为(null)。

但是,如果我执行以下操作并实际初始化局部变量,我可以成功获取变量来保存数据:

PotentialFriend *potentialFriend = [[PotentialFriend alloc]init];

potentialFriend.name = @"Steve";

但是这对我不起作用,因为我在这个VC中有另一个方法实现来设置UITableView的设置,我需要能够访问“potentialFriend.name”的值。

我知道如何做到这一点的唯一方法是使用全局变量,但就像我说的那样,我不能让全局变量实际保存数据。

为什么我无法使全局变量起作用的任何想法?

编辑:

我刚去参加测试。我在View Controller的头文件中创建了一个NSString对象,并且能够成功地将其作为全局变量保存,如下所示:

_potentialFriendz = @"Steve";

所以它必须与我创建自己的名为PotentialFriend的自定义类这一事实有关,但我仍然不明白为什么它不起作用。

1 个答案:

答案 0 :(得分:0)

听起来你没有为potentialFriend分配和初始化一个对象。只是将它声明为标题中的属性不会在其中实例化对象。它只是一个可以保存指定类型的对象的属性。

您需要执行以下操作:

self.potentialFriend = [[PotentialFriend alloc] init];

<{1>}中的

或其他一些初始化方法(如viewDidLoad:

在其他语言中,在没有实例化对象的情况下设置initWithCoder:会抛出某种异常或其他东西,但Objective-C允许将消息发送到nil(当你使用时,你正在做同等的potentialFriend.name点语法)。