私はObjective-Cを初めて使用しています。私はオープン気象マップからデータを解析する天気アプリを作成しようとしています。私は解析されたデータを配列に格納しました。今度は、他のクラスの配列値にアクセスしたいが、ヌル値を取得したい。NSObjectをNSObjectクラスからUIViewControllerクラスに渡すには?
誰でも手伝ってもらえますか?私が試してみました何
:ここ
は、私がデータを格納し、コントローラを表示することを送信しようとしています私のNSObject
クラスです:
- (void)getCurrentWeather:(NSString *)query
{
NSString *const BASE_URL_STRING = @"http://api.openweathermap.org/data/2.5/weather?q=";
NSString *const API_KEY = @"&APPID=APIKEYSTRING";
NSString *weatherURLText = [NSString stringWithFormat:@"%@%@%@",
BASE_URL_STRING, query,API_KEY];
NSURL *weatherURL = [NSURL URLWithString:weatherURLText];
dispatch_async(kBgQueue, ^{
NSData* data = [NSData dataWithContentsOfURL:weatherURL];
[self performSelectorOnMainThread:@selector(fetchedDataSmile | :) withObject:data waitUntilDone:YES];
});
}
- (void)fetchedData:(NSData *)responseData {
NSError* error;
NSDictionary *json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];
NSString* cityName = [json objectForKey:@"name"];
int currentTempCelsius = (int)[[[json objectForKey:@"main"] objectForKey:@"temp"] intValue] - ZERO_CELSIUS_IN_KELVIN;
int maxTemp = (int)[[[json objectForKey:@"main"] objectForKey:@"temp_max"] intValue] - ZERO_CELSIUS_IN_KELVIN;
int minTemp = (int)[[[json objectForKey:@"main"] objectForKey:@"temp_min"] intValue] - ZERO_CELSIUS_IN_KELVIN;
NSString *weatherDescription = [[[json objectForKey:@"weather"] objectAtIndexBlush | :O ] objectForKey:@"description"];
weatherArray = [[NSMutableArray alloc] initWithObjects:cityName, weatherDescription,
[NSString stringWithFormat:@"%d", currentTempCelsius],
[NSString stringWithFormat:@"%d", maxTemp],
[NSString stringWithFormat:@"%d", minTemp],nil];
私のようにNSObject.hファイルを持っています私のビューコントローラで
@interface WeatherData : NSObject
@property (nonatomic) NSString *weatherDescription;
@property (strong, nonatomic) NSString *currentTemp;
@property (nonatomic) int maxTempCelsius;
@property (nonatomic) int minTempCelsius;
@property (nonatomic, retain) NSMutableArray *weatherArray;
- (void)getCurrentWeather:(NSString *)query;
@end
:
.hファイル:
@property (nonatomic, retain) NSMutableArray *weatherResultArray;
.mファイル:
-(void)searchButtonClicked:(UIButton*)sender
{
[self.view endEditing:YES];
WeatherData *weather = [[WeatherData alloc] init];
[weather getCurrentWeather:_textField.text];
self.weatherResultArray = weather.weatherArray;
//temperatureLabel.text = [NSString stringWithFormat:@"%d°",weather.currentTempCelsius];
}
は、私はちょうどUILabelでの結果を示したいと思います。
weather.weatherArrayにアクセスしようとすると、データがhttpコールから返されていないため、コードをすばやく確認できます。したがって、self.weatherResultArrayはNULLです。 – jsondwyer
あなたの戻り値の型は上記の関数では無効ですし、どうすれば配列を取得できますか? –
ビューコントローラ間でデータをやり取りするのは簡単です。このためには、NSObject.hにデリゲート関数を作成する必要があります。この関数では、気象データの配列を作成します。 View Controllerファイルにデリゲートを追加するだけで、デリゲートが呼び出されるときにデータが返されます。 – WasimSafdar