2014-02-06 4 views
2

나는 이미 질문을 게시합니다. How to use Bolts Framework[Facebook+Parse]하지만 이제 질문을했습니다. Bolts 프레임 워크를 사용하려면 웹 서비스를 구문 분석해야합니까?볼트 프레임 워크 [Parse + Facebook]은 구문 분석 웹 서비스를 사용해야합니까?

다음과 같이 (saveAsync:) 파싱 웹 서비스와 관련된 샘플 코드를 제공합니다. 당신은 볼트 프레임 워크를 사용하고자 할 경우는 묻지 마세요 :하지만 Is bolts framework need to use parse webservice?

주, 지금은 혼란을 얻을

[[object saveAsync:obj] continueWithBlock:^id(BFTask *task) { 
    if (task.isCancelled) { 
    // the save was cancelled. 
    } else if (task.error) { 
    // the save failed. 
    } else { 
    // the object was saved successfully. 
    SaveResult *saveResult = task.result; 
    } 
    return nil; 
}]; 

Boltss' github이 라인 "Using these libraries does not require using any Parse services. Nor do they require having a Parse or Facebook developer account"에서 본 적이있다. 이 질문의 첫 번째 줄을보십시오.

+0

아니, 그냥 구문 분석 SDK를 사용하여 구문 분석을 사용할 수 있습니다. 추가적인 프레임 워크가 필요하지 않습니다. – rist

+0

내 친구, 처음에 내 질문을 완전히 읽었습니다. 그런 다음 질문하십시오. 내가 프레임 워크를 구문 분석의 도움없이 볼트 프레임 워크를 사용하고 싶습니다. 이 구문 분석 프레임 워크를 사용할 필요가 있습니까? – Mani

+0

내 친구, Bolts의 문서를 먼저 읽으십시오. "이 라이브러리를 사용하는 경우에는 Parse 서비스를 사용할 필요가 없습니다.또한 Parse 나 Facebook 개발자 계정이 필요하지 않습니다. "https://github.com/BoltsFramework/Bolts-iOS – rist

답변

1

확실히 파싱 웹 서비스가 필요하지 않습니다. 나 자신의 작업을 구현하는 데 동일한 어려움을 겪었고이 프레임 워크를 연구 중이다. BoltsTest code을보십시오 : 유용한 코드를 찾을 수 있습니다.

샘플 프로젝트()에서 몇 가지 실험을 시도하고 있습니다. 기본적으로 BFTask를 반환하는 고유 한 메서드를 정의해야합니다. 여기 간단한 발췌 부분.

- (BFTask*) parseHTML:(NSURL*)url searchString:(NSString*)searchString { 
BFTaskCompletionSource * tcs = [BFTaskCompletionSource taskCompletionSource]; 

NSURLRequest * request = [NSURLRequest requestWithURL:url 
              cachePolicy:NSURLRequestReloadIgnoringLocalCacheData 
             timeoutInterval:30]; 
NSURLResponse * response; 
NSError * error; 
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 
if (!error) { 
    NSString * receivedData = [NSString stringWithUTF8String:[returnData bytes]]; 
    NSUInteger occurrences = [self countOccurencesOfString:@"iOS" inputString:receivedData]; 
    [tcs setResult:[NSNumber numberWithInt:occurrences]]; 


} 
else { 
    [tcs setError:error]; 
} 

return tcs.task; 
} 

그런 다음 문서가 설명하고 작업 상태를 확인할 때 방법을 사용할 수 있습니다.

[[self parseHTML:[NSURL URLWithString:@"http://www.stackoverflow.com"]] continueWithBlock:^id(BFTask *task) { 
if (task.isCancelled) { 
    // the task was cancelled 
} else if (task.error) { 
    // the task failed 
} else { 
    // the task completes 
} 
return nil; 
}]; 
+0

유용한 코드를 연결하는 대신 유용한 코드의 예제를 줄 수 있다면 도움이 될 것입니다. – cpburnz

+0

ASHTTP 또는 AFNetworking과 같은 웹 서비스에 사용되는 타사 프레임 워크에서이 프레임 워크를 사용할 수 있습니까? 나는 당신이 올린 것과 같은 생각을하고 있습니다. 하지만 AFNetwork로 웹 서비스를 작성했습니다. 그것과 볼트를 통합 할 수 있습니까? 아니면이 프레임 워크는 다른 것보다 더 사용해야합니까? – Mani

+0

예제 코드는 꽤 유용합니다. 하지만 제 생각에는 여기에 뭔가가 빠져 있습니다. 위의 코드에서 비동기 작업과 관련이없는 코드를 볼 수 없습니다. Async 작업으로 코드에 대해 설명해 주시겠습니까? 어쨌든 +1 하시겠습니까? 내 생각에, 이것은 볼트 - 프레임 워크를 시작하는 초기 지점입니다. 이 스레드에 게임에 늦은 – Mani

0

는 볼트와 아이디어는 BFTask를 사용 어떤 작업을 캡슐화하는 것입니다. 당신은 반드시 방법으로 작업을 마무리 할 필요가 없습니다, 그러나 당신이 당신의 코드를 구조화하는 방법을 상상하는 좋은 방법 :

- (BFTask*) asynchronousImageProcessOperation; 
- (BFTask*) asynchronousNetworkOperation; 

을 ... 이들 모두가 유사한 패턴을 따를 것입니다 :

- (BFTask*) asynchronousNetworkOperation { 
    BFTaskCompletionSource *source = [BFTaskCompletionSource taskCompletionSource]; 

    // ... here's the code that does some asynchronous operation on another thread/queue 
    [someAsyncTask completeWithBlock:^(id response, NSError *error) { 
    error ? [source setError:error] : [source setResult:response]; 
    } 

    return task; 
} 

그 아름다움은 당신이이 작업들을 어떤 식 으로든 함께 묶을 수 있다는 것입니다. 당신이 그것을 이미지를 처리 ​​한 후 업로드 필요한 경우 예를 들어, 당신은 할 수 : 물론

[[object methodReturnImageProcessingTask] continueWithBlock:^(BFTask *task) { 
    [[anotherObject imageUploadTaskForImage:task.result] continueWithBlock:^(BFTask *task) { 
    self.label.text = @"Processing and image complete"; 
    }] 
}] 

당신은 또한 캡슐화 수있는 자신의 작업에서 두 ​​단계 작업 :

- (BFTask*) processAndUploadImage:(UIImage* image); 

타자 여기 메모리에서. 정말 강력한 시퀀싱 및 그룹화입니다. 위대한 프레임 워크.

+0

감사합니다 itsthejb. 위에서 시도한 것은 비동기 작업이 아닌 비동기 작업 완료 후 BFTask를 사용하여 처리 한 것입니까? 내가 맞습니까? BFTask를 사용하여 리소스를 잠그고 잠금 해제하는 비동기 태스크와 함께 BFTask를 사용하는 방법을 알고 싶습니다. – Mani

+0

예 : AssertLibrary의 모든 이미지를로드하고로드하는 동안 모든 이미지의 크기를 표준 크기로 조정하려는 경우 기본 스레드와 관련이 있으면 충돌합니다. 이 곳에서 비동기식 조작 방법을 사용한다면 BFTask를 어떻게 사용합니까? 또 다른 예. 한 번에, 당신은 비동기 작업과 병렬로 10 webservice를 호출하려고 어떻게 BFTask와 함께 GCD를 사용할 수 있습니까? – Mani

1

이 질문 이후로 오랜 시간이 걸렸으나 mani는 AFNetworking과 함께 Bolts 프레임 워크를 사용할 수 있는지 알고 싶어했지만 사용법을 보여주는 간단한 예제를 추가하려고합니다.
빠르고 간단하고 간단하게 작성되었습니다.

func taskWithPath(path: String) -> BFTask { 

    let task = BFTaskCompletionSource() 
    AFHTTPRequestOperationManager().GET(path, parameters: nil, success: { (operation, response) in 
     task.setResult(response) 

    }) { (operation, error) -> Void in 
     task.setError(error) 
    } 
    return task.task 
} 

희망이 도움이 :)