UNIRest を使用して呼び出しを行い、JSON オブジェクトをアプリに返します。適切なデータを NSDictionary として返すようにし、完璧なログを記録します。私は今、そのデータを取得してビュー内に表示しようとしています。コールバックの外で辞書を使用できません。
変数に関連する同様の結果と投稿を求めて、StackOverflow でここを掘り下げてきました。コールバック ブロック内に限定されているスコープの問題だと思います。
私のヘッダーファイル: (UIViewController)
@property (nonatomic, strong) NSDictionary *tideData;
私の実装:
@interface TideDetailViewController ()
@end
@implementation TideDetailViewController
@synthesize tideData;
- (void)viewDidLoad {
[super viewDidLoad];
// tideData = [[NSDictionary alloc] init];
// location is working, I removed it for testing to call a static string for now
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move
self.locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m
[self.locationManager startUpdatingLocation];
NSString *locationQueryURL = @"http://api.wunderground.com/api/XXXXXXXXXXXXX/tide/geolookup/q/43.5263,-70.4975.json";
NSLog(@"%@", locationQueryURL);
[[UNIRest get:^(UNISimpleRequest *request) {
[request setUrl: locationQueryURL];
}] asJsonAsync:^(UNIHTTPJsonResponse *response, NSError *error) {
// This is the asyncronous callback block
self.code = [response code];
NSDictionary *responseHeaders = [response headers];
UNIJsonNode *body = [response body];
self.rawResults = [response rawBody];
// I tried this as self as well
tideData = [NSJSONSerialization JSONObjectWithData:self.rawResults options: 0 error: &error];
// this logs perfectly.
NSLog(@"tideData %@", tideData);
// tried setting it to the instance
//self.tideData = tideData;
}];
// returns null
NSLog(@"tideData outside of call back %@", self.tideData);
// this is where I will be setting label text for now, will refactor once I get it working
// rest of file contents........
スコーピングに関連するかなりの量の項目を試しましたが、明らかにマークが欠けているだけです。何か案は?グローバル変数の設定などを検索しました。これで少し立ち往生しています。
ありがとう、
ライアン