首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从目标C中的void函数获取变量

从目标C中的void函数获取变量
EN

Stack Overflow用户
提问于 2011-03-09 11:25:14
回答 1查看 812关注 0票数 0

我对Objective C和iOS开发非常陌生(比如5小时新:-)。我有一些代码调用API对用户进行身份验证,并返回一个简单的OK或FAIL。我可以将结果写入控制台,但我需要做的是将该结果作为IBAction的一部分进行获取。

下面是IBAction代码:

代码语言:javascript
复制
- (IBAction) authenticateUser
{
    [txtEmail resignFirstResponder];
    [txtPassword resignFirstResponder];

    [self performAuthentication];

    if (authResult == @"OK")

我需要的是让authResult成为JSON结果(OK或FAIL)。下面是获得结果的代码:

代码语言:javascript
复制
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    [connection release];

    NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
    NSLog(@"%@", responseString);
    [responseData release];

    NSMutableDictionary *jsonResult = [responseString JSONValue];
        if (jsonResult != nil) 
            {
                NSString *jsonResponse = [jsonResult objectForKey:@"Result"];
                NSLog(@"%@", jsonResponse);
            }
}

非常感谢你的帮助,如果我遗漏了一些明显的东西,我很抱歉!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-09 11:48:24

我有点困惑这是怎么回事...看起来您的-performAuthentication方法必须通过NSURLConnection启动一个异步网络请求,并且您的连接委托的-connectionDidFinishLoading: gets来确定请求的结果。到目前为止还好吗?但是您的-authenticateUser方法期望在-performAuthentication返回后立即确定authResult。如果网络请求是异步的,这是不会发生的。如果我在关注你,我认为你需要做以下事情:

  1. 修复-connectionDidFinishLoading:因此它实际上是根据jsonResponse中的结果值来设置authResult。我相信你总有一天会解决这个问题的。
  2. 改变了-authenticateUser,这样它就不会立即得到答案。你必须给网络请求一个完成它的任务的机会,
  3. 添加了另一个方法,可能叫做-authenticationDidFinish或者类似的东西。当前在-authenticateUser中的所有内容都来自'if (authResult...‘最后是这个新方法,从字符串比较( -connectionDidFinishLoading:.
  4. Fix
  5. )中调用新方法。如果你想在Cocoa中比较两个字符串,你可以说(例如):

if ([authResult isEqualToString:@"OK") { }

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5240952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档