1

我对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 语句被跳过,然后我进入 end '}' 然后最终返回到被跳过的 return 语句。不幸的是,最后一步清除了方法中所有声明的值,因此返回始终为 NULL。

我不知道为什么会发生这种情况。我假设它可能与ARC有关。有没有人可以解决这个问题?

::编辑::

添加了调用前一个方法的方法。对象的名称是 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) { }

有什么理由可以解决这个问题吗?

4

0 回答 0