【问题标题】:Get value from void on Objective-C在 Objective-C 上从 void 中获取价值
【发布时间】:2012-09-28 10:03:59
【问题描述】:

我想从我的 void 方法中获取 json 字符串,让我们看看

-(void) getIDfromMarket{}

我想从 getIDfromMarket 显示结果 json,它已经成功了,现在我想将它传递给

-(void)viewDidLoad

怎么做?这是我的代码

#import "ViewController.h"
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    [self getIDfromMarket];
     NSLog(@"ID==",ID);
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

//////get global market From JSOn
-(void) getIDfromMarket{
    NSError *error = nil;
    ///set params url to get market localization
    NSData *jsonData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://someurl"]];
    if (jsonData) {
    id jsonObjects = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];
    NSArray *Market = [jsonObjects objectForKey:@"market"];
        NSLog(@"%@", Market);
        if(Market==NULL){
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Oh Snap!" message:@"Can't Get Market ID " delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
            [alert show];

        }
    }
    else{

        NSLog(@"Error Fetch Market ID");
 }

}

@end

我想登录NSLog(@"%@", Market);而不是viewDidLoad,怎么做?

【问题讨论】:

  • 您的问题是关于如何从方法中返回值?如果你想从getIDfromMarket返回一些东西然后把返回类型而不是voidvoid表示没有值。
  • 嘿 borrden,我想获取 NSLog(@"%@", Market);在 viewDidLoad 上显示值,比如说 NSLog value == "SOMEID" 如何从 ViewDidLoad 调用它?
  • 你明白什么是返回值吗?
  • 如果market是成员变量,则可以登录viewDidLoad。或从 -(id)getIDfromMarket 返回值;
  • @ParagBafna 现在我更改 -(void) getIDfromMarket{ --> -(id)getIDfromMarket;现在如何将其调用到 viewDidLoad 中??

标签: ios objective-c json string return


【解决方案1】:

如果您希望能够使用从您的 JSON 请求返回的结果,您应该将 getIDFromMarket 返回类型从 (void) 更改为 (NSArray),然后在请求成功的情况下在方法末尾键入“return市场”如果失败则返回零。

然后从 -(void) viewWillApper 调用类似 NSArray *thisArray = [getIDFromMarket];的方法

从这里您将能够使用数组中的内容并在视图加载之前在屏幕上设置数据

另一种选择是拥有 NSArray 的属性,当返回结果时,您会将其存储到该属性中,以后您可以从该类中的任何方法访问该属性。

希望对你有帮助

//////get global market From JSOn
-(NSArray) getIDfromMarket{
    NSError *error = nil;
    ///set params url to get market localization
    NSData *jsonData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://someurl"]];
    if (jsonData) {
    id jsonObjects = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];
    NSArray *Market = [jsonObjects objectForKey:@"market"];
        NSLog(@"%@", Market);
        if(Market==NULL){
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Oh Snap!" message:@"Can't Get Market ID " delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
            [alert show];
            return nil;
        }
        else {
            return Market;
        }
    }
    else{
        NSLog(@"Error Fetch Market ID");
        return nil;
 }

}

然后在viewWillAppear中

- (void)viewWillAppear
{
    [super viewWillAppear];

    NSArray *results = [self getIDfromMarket];
     NSLog(@"ID==%@",results);
}

【讨论】:

  • 请注意,请其他开发人员为您编写代码是一种不好的做法。但都是来帮忙的,只是不要滥用它。
  • 函数应该是 -(NSArray *) getIDfromMarket 和 *
【解决方案2】:

如果market是成员变量,那么你可以登录viewDidLoad。或者从-(id)getIDfromMarket;返回值

-(id) getIDfromMarket{
    // your code
    return market; // autorelase
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSArray *lArray  = [self getIDfromMarket];// autorelase
    NSLog(@"ID==",lArray);

}

【讨论】:

  • 它的错误“使用未声明的”标识符“市场”,应该在哪里声明市场? *对不起,我是菜鸟
【解决方案3】:
-(NSArray *) getIDfromMarket{
    NSError *error = nil;
    ///set params url to get market localization
    NSData *jsonData = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://someurl"]];
    if (jsonData) {
        id jsonObjects = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&error];
        NSArray *Market = [jsonObjects objectForKey:@"market"];
        NSLog(@"%@", Market);
        if(Market==nil){
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Oh Snap!" message:@"Can't Get Market ID " delegate:self cancelButtonTitle:@"OK" otherButtonTitles: nil];
            [alert show];
            return nil;
        } else {
            return Market;
        }
    }
    else{

        NSLog(@"Error Fetch Market ID");
        return nil;
 }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 1970-01-01
    • 2014-11-02
    • 1970-01-01
    • 2013-12-06
    • 2015-05-21
    • 1970-01-01
    相关资源
    最近更新 更多