XCode NSObject方法错误。在返回方法之前清除数据

时间:2013-07-29 04:22:21

标签: ios xcode return automatic-ref-counting

我对iphone开发非常陌生,所以我确定我犯了一个愚蠢的错误。

我有一个自定义对象,它是NSObject的子类,它包含一个调用以下方法的方法:

-(NSArray*)pageOutput:(NSString *)query page:(int)pagenumber
{
    // create the GET url string
    NSMutableString *urlString = [[NSMutableString alloc] init];
    [urlString appendString:@"http://webpage.com/api.php?"];

    [urlString appendString:[NSString stringWithFormat:@"query=%@&page=%i", query, pagenumber]];

    NSError *error;

    // request JSON response from server
    NSURL *url = [NSURL URLWithString:[urlString stringByReplacingOccurrencesOfString:@" " withString:@"%20"]];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&error];

    NSMutableArray *jsonArray = [NSJSONSerialization JSONObjectWithData:response options:NSJSONReadingMutableContainers error:nil];

    return jsonArray;
}

调试时我注意到jsonArray的值是有效的,然后发生了一些有趣的事情。 当我单步执行调试器时,我注意到跳过了return语句,然后我跳到结尾'}'然后最后返回到被跳过的return语句。 不幸的是,最后一步清除了方法中的所有声明值,因此返回始终为NULL。

我不知道为什么会这样。我假设它可能与ARC有关。有没有人有解决这个问题的方法?

:: EDIT ::

添加了调用上一个方法的方法。对象的名称是rdoSearch

-(id)initSearch:(NSString *)searchQuery page:(int)pagenumber
{
    self = [super self];

    NSError *error;

    NSMutableArray *localResult = [[NSMutableArray alloc] init];

    rdoSearch *testSearch = [[rdoSearch alloc] init];

    NSArray *jsonArray = [testSearch pageOutput:searchQuery page:pagenumber];

    NSLog(@"%@", jsonArray);

    return self;    
}

::编辑#2 ::

我想出了如何解决这个问题。我把所有代码放在这个声明中:

if (self) { }

为什么这样可以解决问题?

0 个答案:

没有答案