현재 작업중인 앱의 동기화 클래스를 작성했습니다.비동기 데이터 연결 iOS
많은 양의 데이터 때문에 처음에는 데이터 개수를 얻은 다음 NSOperationQueue
에 다운로드를 배치합니다. 이 모든 작품이 잘 작동하고 신속하게 동기화 알고리즘을 가지고있어.
작동 방식은 다음과 같이 ...이다
- (void)synchroniseWithCompletionHandler://block for completion handler
errorHandler://block for error handler
{
[self.queue addOperationWithBlock
^{
//Create an NSURLRequest for the first batch
//Send the request synchronously
//Process the result
//If error then cancel all operations in the queue, run errorHandler and return.
}];
[self.queue addOperationWithBlock
^{
//Create an NSURLRequest for the second batch
//Send the request synchronously
//Process the result
//If error then cancel all operations in the queue, run errorHandler and return.
}];
//Add all the remaining batches.
[self.queue addOperationWithBlock
^{
completionHandler();
}];
}
이 작동하고 최대 최소 속도로 메모리 사용량을 유지합니다. 아이디어는 다운로드와 프로세스가 모두 동일한 블록에 있고 둘 다 처리되어 큐의 다음 작업으로 이동한다는 것입니다.
이제는 서버에서 OAuth2를 구현하여 호출을 인증했습니다.
NXOAuth2 라이브러리를 통해 NXOAuth2Request를 설정하여이 작업을 수행했습니다. 그런 다음 계정을 설정하고 서명 된 URL 요청을 철회하십시오. 그런 다음 이전에했던 것처럼이 NSURLRequest를 사용합니다.
문제는 OAuth 토큰이 동기화를 통해 절반 만료되면 동기화가 실패한다는 것입니다.
NXOAuth2 라이브러리는
+ (void)performMethod:(NSString *)aMethod
onResource:(NSURL *)aResource
usingParameters:(NSDictionary *)someParameters
withAccount:(NXOAuth2Account *)anAccount
sendProgressHandler:(NXOAuth2ConnectionSendingProgressHandler)progressHandler
responseHandler:(NXOAuth2ConnectionResponseHandler)responseHandler;
이 토큰 새로 고침을 수행 한 후 요청을 다시 전송하여 만기 된 토큰의 상황을 처리 ... 기능이 있습니다.
그러나이 기능은 비동기식이므로 동기화 프로그램에 가장 적합한 방법을 잘 모르겠습니다.
이 작업을 사용하여 작업을 추가 한 다음 처리를 완료 블록에 넣을 수 있습니다. 그러나이 작업을 수행하면 모든 다운로드가 거의 동시에 모두 실행되며 다운로드가 처리되는 순서를 보장 할 방법이 없습니다. 데이터 종속성으로 인해 엄격한 순서로 처리해야합니다.
내가 지금이 일을 생각할 수있는 유일한 방법은 ... 함께
[NXOAuth2Request performFirstRequest...
{
deal with the data.
[NXOauth2Request performSecondRequest...
{
deal with the data.
[NXOauth2Request performThirdRequest...
{
deal with the data.
finish
}];
}];
}];
모두-체인 데이지이다 그리고 이것은 단지 지저분하고 아주 지저분한 얻을 수 있습니다.
다른 방법이 있나요 나는 이것을 전혀 처리 할 수 있습니까? 내가 생각할 수있는 유일한 다른 일은 자신을 상쾌하게하려고 노력하는 것입니다.
네, NSOperation 서브 클러킹을 생각하지 않았습니다. (TBH는 결코 전에 제대로 해냈다). 또한 NSOperation 내에서 비동기 호출도 차단할 수 있다는 것을 깨닫지 못했습니다. 고마워, 좀 봐. – Fogmeister
github 프로젝트에 대한 링크를 추가 할 수 있습니까? 감사합니다 – Fogmeister
완료 - 그것의 편집 된 대답 –