Если я правильно понял, что вы пытаетесь достичь, это следующее:
- Создайте
NSURLConnection
и настройте его для получения файла JSON. - Когда соединениезавершите, проверьте, является ли полученный файл удовлетворительным.
- Если файл не является удовлетворительным, тогда предупредите пользователя.
Если мое понимание правильное, вам не нужно расширятьпротокол NSURLConnectionDelegate
.Все, что вам нужно сделать, это реализовать NSURLConnectionDelegate.Шаблон делегата позволяет изменить поведение класса.(В других языках / платформах поведение, которое вы объяснили, будет реализовано с помощью подклассов. Класс URL-соединения будет разделен на подклассы, а методы и переопределены для изменения поведения.) Это может стоить того, чтобы вы прочитали Шаблоны проектирования какао .
Обычно класс, создавший объект, является его делегатом.В следующем коде показано создание соединения и сопутствующих реализаций метода делегата.
@interface SOViewController : UIViewController <NSURLConnectionDelegate> //this simply tells the compiler that SOViewController implements the NSURLConnectionDelegate protocol. If you excluded you will get a compiler warning but the code will behave correctly. You should include it.
//...
@property(readwrite, nonatomic, retain) NSURLConnection *connection;
@property(readwrite, nonatomic, retain) NSMutableData *data;
@end
@implementation SOViewController
//...
-(void)setupJSONFetch:(NSURL *)url
{
NSURLRequest *request = [NSURLRequest requestWithURL: url]; //create a request
NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self]; //create a connection and set self as the delegate
self.connection = connection; //keep a reference to the connection
self.data = [NSMutableData data]; //create an object to store the downloaded data
[connection start]; //go!
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
//store the downloaded data
[self.data appendData: data];
}
- (void)connectionDidFinishDownloading:(NSURLConnection *)connection destinationURL:(NSURL *)destinationURL
{
//Check self.data is as expected
}
//...
@end
Стоит также отметить, что методы делегата NSURLConnection
были реорганизованы в iOS 5.