私は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と関係があると思います。誰でもこの問題の解決策を持っていますか?
::編集::
前のメソッドを呼び出すメソッドを追加しました。オブジェクトの名前は 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) { }
これで問題が解決する理由はありますか?