Привет всем, я пытаюсь использовать Yahoo PlaceFinder, чтобы сделать обратное геокодирование для приложения, которое я делаю. Проблема в том, что мне нужно использовать NSURLConnection для вызова моей базы данных. Поэтому я решил создать пользовательский класс, который инициализируется широтой и долготой пользователя и хранит только строковую переменную, содержащую состояние, в котором находится пользователь.
Обновление следующего кода теперь работает нормально ....
Вот это .h
#import <Foundation/Foundation.h>
#import "CJSONDeserializer.h"
@interface StateFinder : NSObject
{
NSString *userState;
NSURLConnection *connection;
}
-(id)initwithLatitude:(NSString *)latitude andLongitude:(NSString *)longitude;
@property (nonatomic, retain) NSString *userState;
@property (nonatomic, retain) NSURLConnection *connection;
@end
и .m
#import "StateFinder.h"
@implementation StateFinder
@synthesize userState;
@synthesize connection;
-(id)initwithLatitude:(NSString *)latitude andLongitude:(NSString *)longitude
{
if(self = [super init])
{
NSString *lat = latitude;
NSString *lon = longitude;
NSString *stateURLFinder = [NSString stringWithFormat:@"http://where.yahooapis.com/geocode?q=%@,+%@&gflags=R&flags=J&appid=zqoGxo7k", lat, lon];
//NSLog(stateURLFinder);
NSURL *stateURL = [NSURL URLWithString:stateURLFinder];
NSURLRequest *request = [[NSURLRequest alloc] initWithURL: stateURL];
connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[request release];
}
return self;
}
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
NSLog(@"didReceiveResponse");
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSLog(@"didFinishLoading");
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog(@"didFailWithError");
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
// Store incoming data into a string
NSString *jsonString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(jsonString);
// Yes, this is incomplete, but I was waiting for the method to fire before going
// any further. This will at least show me the JSON data being returned from yahoo
// in string format so I can output it to the console via NSLog
}
- (void)dealloc
{
[userState release];
[connection release];
[super dealloc];
}
@end
Это текущий код, который я использую, и он отлично работает. Все, что я сделал, это включил методы connectionDidFinishLoading и didFailWithError в исходный код. Что касается соединения, которое было освобождено до того, как оно было установлено, я использовал приведенный выше код как есть, без ранее упомянутых методов, и ни один из didReceiveData / didReceiveResponse не срабатывал. Только когда эти 2 метода были включены, методы начали вызываться. Не уверен, как, не уверен, почему, но это было единственное изменение среди всех предложенных, которые работали Большое спасибо @Jiva DeVoe, @XJones, @jlehr и @Aby за все советы / подсказки / предложения!