我对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) { }
有什么理由可以解决这个问题吗?