从appdelegate传递一个全局变量,返回null

时间:2013-06-23 15:22:37

标签: ios objective-c

我设置一个全局变量来存储从socket逐个服务器获取的字符串值。 套接字是在appdelegate中实现的,如下所示:

在appdelegate.h中

@interface AppDelegate : NSObject <NSStreamDelegate,UIApplicationDelegate> {
    UIWindow *window;
    UITabBarController *tabBarController;
    NSInputStream   *inputStream;
    NSOutputStream  *outputStream;
    NSString *sn,*sn1;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;
@property (nonatomic, retain) NSInputStream *inputStream;
@property (nonatomic, retain) NSOutputStream *outputStream;
@property (nonatomic, retain) NSString *sn,*sn1;
在appdelegate.m

@synthesize  sn,sn1

然后当传入套接字流委托时,我设置

sn=input
 NSLog(@"1st sn: %@",sn);//this sn correct! 

然后在SecondViewControll.m中 我设置 SN1 = @ “你好”;

在FirstViewControll中,我实现如下: AppDelegate * appDel;

- (void)viewDidLoad
{
    [super viewDidLoad];
      appDel = (AppDelegate *)[[UIApplication sharedApplication] delegate];
   NSLog(@"sn1: %@",sn1);;//this sn correct!

LTField.text=appDel.sn; //this one gives error as below, 

}

错误是:

-[__NSCFSet _isNaturallyRTL]: unrecognized selector sent to instance 0x5f87580
2013-06-23 22:49:26.038 test[2987:12c03] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFSet _isNaturallyRTL]: unrecognized selector sent to instance 0x5f87580'

我不知道为什么最后一行会出错但前一行得到正确值? 我猜是因为sn是委托中的设置值,然后它没有传递出deletegate。 如何从该流委托传递正确的数据到此文本字段?

1 个答案:

答案 0 :(得分:1)

尝试在NSLog(@"sn: %@", sn);日志后添加sn1。设置sn = input;后,可能会在该方法完成后input超出范围。这使sn成为无效指针,并传递LTField.text空引用。通常,当您希望将NSString对象作为参数传递时,您将使用:

sn = [input copy];

您希望copy输入变量,因为NSString是不可变的,类似于retain可变对象的方式。

此外,您应该将@property声明更改为(nonatomic, copy)的{​​{1}},然后您可以使用

NSString

如果您愿意(因为使用self.sn = input; 和点符号调用setter而不是直接使用变量)。有关其他信息,请参阅此问题:NSString property: copy or retain?