我对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) { }
为什么这样可以解决问题?