আমি এনএসআরএল সংযোগ সাবক্লাস করার সিদ্ধান্ত নিয়েছি এবং একটি ট্যাগ, প্রতিনিধি এবং একটি এনএসমুতাবালা ডেটা যুক্ত করব। আমার কাছে একটি ডেটা কন্ট্রোলার ক্লাস রয়েছে যা অনুরোধগুলি সহ সমস্ত ডেটা ম্যানেজমেন্ট পরিচালনা করে। আমি একটি ডেটা কন্ট্রোলারডেলিগেট প্রোটোকল তৈরি করেছি, যাতে স্বতন্ত্র ভিউ / অবজেক্টগুলি তাদের অনুরোধগুলি কখন শেষ হয়ে যায়, এবং যদি প্রয়োজন হয় তবে ডাউনলোড হয়েছে বা ত্রুটি হয়েছে কিনা তা জানতে ডেটা কন্ট্রোলার শুনতে শুনতে পারে। ডেটা কনট্রোলার শ্রেণি একটি নতুন অনুরোধ শুরু করতে এনএসআরএল সংযোগ সাবক্লাস ব্যবহার করতে পারে এবং অনুরোধটি কখন শেষ হয়ে যায় তা জানতে ডেটা কন্ট্রোলার শুনতে চাইলে যে প্রতিনিধি সংরক্ষণ করতে পারে save এটি এক্সকোড ৪.৪.২ এবং আইওএস my এ আমার কাজের সমাধান।
DataController.h ফাইল যা DataControllerDelegate প্রোটোকল ঘোষণা করে)। ডেটা কন্ট্রোলার একটি সিঙ্গলটনও:
@interface DataController : NSObject
@property (strong, nonatomic)NSManagedObjectContext *context;
@property (strong, nonatomic)NSString *accessToken;
+(DataController *)sharedDataController;
-(void)generateAccessTokenWith:(NSString *)email password:(NSString *)password delegate:(id)delegate;
@end
@protocol DataControllerDelegate <NSObject>
-(void)dataFailedtoLoadWithMessage:(NSString *)message;
-(void)dataFinishedLoading;
@end
DataController.m ফাইলের মূল পদ্ধতিগুলি:
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
NSURLConnectionWithDelegate *customConnection = (NSURLConnectionWithDelegate *)connection;
NSLog(@"DidReceiveResponse from %@", customConnection.tag);
[[customConnection receivedData] setLength:0];
}
-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
NSURLConnectionWithDelegate *customConnection = (NSURLConnectionWithDelegate *)connection;
NSLog(@"DidReceiveData from %@", customConnection.tag);
[customConnection.receivedData appendData:data];
}
-(void)connectionDidFinishLoading:(NSURLConnection *)connection {
NSURLConnectionWithDelegate *customConnection = (NSURLConnectionWithDelegate *)connection;
NSLog(@"connectionDidFinishLoading from %@", customConnection.tag);
NSLog(@"Data: %@", customConnection.receivedData);
[customConnection.dataDelegate dataFinishedLoading];
}
-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
NSURLConnectionWithDelegate *customConnection = (NSURLConnectionWithDelegate *)connection;
NSLog(@"DidFailWithError with %@", customConnection.tag);
NSLog(@"Error: %@", [error localizedDescription]);
[customConnection.dataDelegate dataFailedtoLoadWithMessage:[error localizedDescription]];
}
এবং একটি অনুরোধ শুরু করতে: [[NSURLConnectionWithDelegate alloc] initWithRequest:request delegate:self startImmediately:YES tag:@"Login" dataDelegate:delegate];
এনএসআরএল সংযোগটি উইথডেলিগেট এইচ: @ প্রোটোকল ডেটা কন্ট্রোলারডেলিগেট;
@interface NSURLConnectionWithDelegate : NSURLConnection
@property (strong, nonatomic) NSString *tag;
@property id <DataControllerDelegate> dataDelegate;
@property (strong, nonatomic) NSMutableData *receivedData;
-(id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate startImmediately:(BOOL)startImmediately tag:(NSString *)tag dataDelegate:(id)dataDelegate;
@end
এবং এনএসআরএল সংযোগবিহীন ডেলিগেট.এম:
#import "NSURLConnectionWithDelegate.h"
@implementation NSURLConnectionWithDelegate
-(id)initWithRequest:(NSURLRequest *)request delegate:(id)delegate startImmediately:(BOOL)startImmediately tag:(NSString *)tag dataDelegate:(id)dataDelegate {
self = [super initWithRequest:request delegate:delegate startImmediately:startImmediately];
if (self) {
self.tag = tag;
self.dataDelegate = dataDelegate;
self.receivedData = [[NSMutableData alloc] init];
}
return self;
}
@end