Concurrent networking in iOS5

NSURLConnection

NSURLRequest

NSURLResponse

require a lot of boilterplate code

in iOS5,

+(void)sendAsynchronousRequest:(NSURLRequest*)requestqueue:(NSOperationQueue*)queuecompletionHandler:(void(^)(NSURLResponse*,NSData*,NSError*))handler;

so,

//Create the request
NSURL*url=[NSURLURLWithString:@"https://the.api.com/method/"];
NSMutableURLRequest*request=[NSMutableURLRequestrequestWithURL:url];

//Create the queue
NSOperationQueue*queue=[[NSOperationQueuealloc]init];
queue.name=@"com.your.unique.queue.name";

[NSURLConnectionsendAsynchronousRequest:requestqueue:queuecompletionHandler:^(NSURLResponse*response,NSData*data,NSError*error){
//If there was an error getting the data
if(error){
dispatch_async(dispatch_get_main_queue(),^(void){
//Display error message in UI
});
return;
}
//Do stuff with the data
dispatch_async(dispatch_get_main_queue(),^(void){
//UpdateUI
});
}];

NSManagedObjectContext

-(id)initWithConcurrencyType:(NSManagedObjectContextConcurrencyType)ct;
-(void)setParentContext:(NSManagedObjectContext*)parent;
-(void)performBlock:(void(^)())block;

SeyoumaicontextexecutoMaiQueu(NSMainQueueConcurrencyType)

CreataimporcontexantelCorDattcreatnequeufoi(NSPrivateQueueConcurrencyType)

SethmaicontexathimporcontextparenContext

OthimporcontextcalperforBlocandthimpor(i.e.dowloadatavalidatitimporitpurgoldatetc

SavchangeothimporcontextThiwilstagiuonleve(tthmaicontex)

SavchangeothmaicontextThiwilpersisiothassociatepersistenstor(anupdatNSFetchedResultControlleretc)

//Set up the main context(probably in the AppDelegate)

[[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];

 

NSManagedObjectContext *importContext=[[NSManagedObjectContextalloc]initWithConcurrencyType:NSPrivateQueueConcurrencyType];
importContext.parentContext=self.managedObjectContext;

[importContext performBlock:^{
//Download data,import etc..
NSError* importError=nil;
[importContext save:&importError];

[importContext.parentContext performBlock:^{
    NSError*parentError=nil;
    [importContext.parentContext save:&parentError];
}];
}];

 

posted on 2012-05-26 21:38  grep  阅读(704)  评论(0编辑  收藏  举报