在另一个文件中使用 NSString 对象总是显示空值?
Posted
技术标签:
【中文标题】在另一个文件中使用 NSString 对象总是显示空值?【英文标题】:used NSString object in another file shown always null value ? 【发布时间】:2013-12-05 09:04:58 【问题描述】:我有两个 .m 文件。我在另一个 .m 文件上使用了 nsstring 对象,它始终为空。
//postputgetFunction.h
@property(retain,nonatomic) IBOutlet NSMutableString *postRegisterResponseUserId;
//postputgetFunction.m
@synthesize postRegisterResponseUserId;
-(void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
if ([flag isEqualToString:@"post"])
NSLog(@"Post received data here.....");
NSDictionary *dict=[NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
postRegisterResponseName=[dict valueForKey:@"Name"];
postRegisterResponseSuccess=[dict valueForKey:@"Success"];
postRegisterResponseUserId=[dict valueForKey:@"UserId"];
NSLog(@"ReceiveData :Name : %@ \n Success : %@ \n UserId : %@",postRegisterResponseName,postRegisterResponseSuccess,postRegisterResponseUserId);
//Above statement display the value properly..........
flag=Nil;
但我在另一个 .m 文件中使用...在这个 .m 文件中,它显示的空值 .. 像这样, //验证.h
#import "PostPutGetFunction.h"
@property (retain, nonatomic) PostPutGetFunction *postputgetFunction;
//验证.m
- (void)viewDidLoad
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
postputgetFunction=[[PostPutGetFunction alloc]init];
- (IBAction)verificationBtnClick:(id)sender
NSLog(@"%@",postputgetFunction.postRegisterResponseUserId);
//here its always shown NULL ... i didnt get the value here ...
【问题讨论】:
由于您似乎异步获取字符串,我假设您在回调触发之前访问字符串。您将请求发送到哪里? PostPutGetFunction 类包含两个方法 post 并将 ..first post 方法从登录表单调用并将值存储在字符串中并导航到验证 xib。单击该验证类的按钮后,它会执行 verificatinBtnClick 操作以获取 userid 的值 仍然不确定,但我坚持异步问题。您发送请求 -> 导航到 verify.xib -> 获取用户 ID 的值(此处仍为 NULL) -> 服务器现在通过回调进行响应 -> 现在用户 ID 已设置。请求是异步的,意思是:请求发送后,其余代码“沿着请求”执行。 【参考方案1】:在其他 .m 文件的 viewDidLoad 方法中,您使用
分配和初始化 PostPutGetFunctionpostputgetFunction=[[PostPutGetFunction alloc]init];
这就是 PostPutGetFunction 类 NSMutableString *postRegisterResponseUserId 中定义的变量初始化为 Null 的原因。您可以使用 Delegates 在两个控制器之间传递数据。或者,您可以将用户 ID 存储在 NSUserDefault 类中,如下所示
**First Part**
NSDictionary *dict=[NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
NSString *name =[dict valueForKey:@"Name"];
NSString *success=[dict valueForKey:@"Success"];
NSString *userid =[dict valueForKey:@"UserId"];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:name forKey:@"NAME"];
[defaults setObject:success forKey:@"SUCCESS"];
[defaults setObject:userid forKey:@"USERID"];
[defaults synchronize];
要检索另一个 class.m 中的值,请使用以下代码
**Second Part**
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSString *name = [defaults objectForKey:@"NAME"];
NSString *success = [defaults objectForKey:@"SUCCESS"];
NSString *userid = [defaults objectForKey:@"USERID"];
而且您也不将 IBOutlet 用于 NSMutableString 类型,而是将其用于像下面这样的 UI 控件类型
【讨论】:
让我用谷歌搜索一下:iosdevelopertips.com/objective-c/… @MAC113 查看我编辑的答案我认为您的唯一目标是获取其他 .m 文件中的值。与静态类型相比,这是一种非常直接的方法。 是的,我想在其他页面中获取值,但请在上面的代码中写两次,我没有得到我在代码中使用的确切内容... 请再写一遍我需要的内容 在 postputgetFunction.m connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 方法中,您正在获取 name、success、userid 的值,使用第一部分设置 NSUserDefault 和在 other.m 文件中,使用第二部分获取您之前存储的值,希望这对您有所帮助。【参考方案2】:您正在声明PostPutGetFunction
的新对象,并且确定postRegisterResponseUserId
的值将为空
如果你想完成你必须使用委托,看看这个answer
【讨论】:
以上是关于在另一个文件中使用 NSString 对象总是显示空值?的主要内容,如果未能解决你的问题,请参考以下文章
MySQL DATETIME 在一个表中显示正确的日期,但在另一个表中显示不正确的时间(总是午夜)?
在 iOS 4.2 SDK 中返回 NSString 的函数总是返回 nil
什么Objective-C NSString方法需要检查字符串是否包含在另一个字符串中? [重复]
试图从一个 Viewcontroller 中的 UILabel 获取 NSString 以放置在另一个 Viewcontroller 的 UITextView 中