确定。我假设我对ARC的误解是我发布这个的原因,但是在这里。所以我有一个课程,让我们称之为课堂 A ,我打电话和参考,并且在课堂 B 中的表现非常出色。现在,当我访问类 C 中的类 A 时,我需要的属性返回一个空值。注意:由于我的方法的结构方式,我只需要在每次调用时访问属性,而不是调用方法,因为每次调用它时该方法都会返回不同的结果。我究竟做错了什么?以下是我在类 A :
中的头文件中声明属性的方法·H
@property (retain) NSString * userKey;
以下是我设置它的方法:
-(NSString *)grabUserKey{
//Grabs a string from a web service each time it is called
NSString *getUserKey = [NSString stringWithFormat:@"%@/webservices/***/mobile_services_ios7.cfc?method=create_account&client_key=%@", [self grabHomeURl],CLIENT_KEY];
NSLog(@"%@", getUserKey);
NSString * user_key = [[NSString alloc] initWithContentsOfURL:[NSURL URLWithString:getUserKey] encoding:NSUTF8StringEncoding error:nil];
//I only need this property once and only once. However, this property is null the second time I call it
self.userKey = user_key;
return user_key;
}
现在,当我尝试在另一个方法中使用此属性时,在同一个类中(强调。)我第二次引用它时得到一个null结果:
-(NSString *) returnFilePath{
NSString *userDBPath = [PATH stringByAppendingPathComponent:CLIENT_KEY];
//self.userKey returns null when called in class C, but not in class A
NSString * userFilePath = [userDBPath stringByAppendingPathComponent:self.userKey];
return userFilePath;
}
以下是我如何初始化类的 A C
·H
@property (retain) RetriveFilePath * filePath;
.m
_filePath = [[RetriveFilePath alloc]init];
NSString * localShow = [_filePath returnFilePath];
那么为什么当我访问B类中的A类时(第一次在编译期间访问类A),这是有效的。但是当我在C类中访问A类时,我得到null userKey?希望我能清楚地为每个人解释。
答案 0 :(得分:0)
您在A类的属性NSString *userKey
中设置了一个用户密钥。它不是持久性数据。您必须将数据保存在其他位置,例如NSUserDefault
。
根据您附加的代码,
_filePath = [[RetriveFilePath alloc]init];
NSString * localShow = [_filePath returnFilePath];
您实例化RetriveFilePath
并尝试获取userKey;但是RetriveFilePath中没有userKey,因为你还没有获得数据。
无论您在何处调用[_filePath grabUserKey]
,它与_filePath都不是同一个实例。
使用NSUserDefault或使类单例。