물론
가능 윌하고 AFNetworking 함께 할 거의 가지고 있지만 훨씬 더 일반적인 프로그래밍 패턴으로 할 수 있습니다.
AFURLConnectionOperation
개체는보기 컨트롤러 외부에 저장해야합니다.이 개체는 둘 다 액세스 할 수 있습니다. 가장 좋은 방법은 이미지 업로드를 처리 할 AFNetworking 속성과 메서드를 캡슐화하는 singleton class을 만드는 것입니다. 해당 업로드에 대한 정보가 있거나 해당 업로드와 상호 작용이 필요하면 언제든지 sharedInstance
과 같은 클래스 메소드를 통해 해당 싱글 톤에 액세스 할 수 있습니다.
+ (id)sharedInstance
{
static dispatch_once_t once;
static id sharedInstance;
dispatch_once(&once, ^{
sharedInstance = [[self alloc] init];
});
return sharedInstance;
}
당신은 웹 서비스 (그리고 원시 FTP 서버)와 상호 작용하는 경우, 다음 AFHTTPClient의 서브 클래스 아마 급 솔루션의 '업로드 관리자'유형에 대한 가장 좋은 것입니다. 간단한 클래스를 사용하면 다음 깨끗하게하여 UI 업데이트 (예를 들어, 진행률 표시 줄)을 처리 할 수 viewWillDisappear에 ViewControllers 'viewWillAppear & 등록 취소에 KVO 알림을 등록 할 수 있습니다 함께 넣어 일단
은 당신이 선택하든. 키 - 값 관측을 이해하지 못하면 Introduction to Key-Value Observing Programming Guide을 읽으십시오. 당신은 당신의 벨트 밑에 그 지식을 가지고 아이폰 OS에서 대처할 수있을 것입니다.
그래서,보기 A의 업로드 코드를 작성하고 URL을 사용하여 업로드 대기열에 자신의 마법 새로운 클래스를 사용
(다음과 같이 여러 방법으로 메모리, NSFileURLs 또는있는 NSString 이미지를 사용하도록 할 수있다)
[[MyImageUploadManager sharedInstance] uploadImageFromPath:@"/wherever/1.png" toURL:[NSURL URLWithString:@"ftp://someserver.com/images/"]];
보기 C의 viewWillDisappear보기 C의 컨트롤러의 viewWillAppear
- (void) viewWillAppear:(BOOL)animated
{
...
[[MyImageUploadManager sharedInstance] addObserver:self forKeyPath:@"progress" options:NSKeyValueObservingOptionNew context:nil];
...
}
...과의
- (void)viewWillDisappear:(BOOL)animated
{
...
[[MyImageUploadManager sharedInstance] removeObserver:self forKeyPath:@"progress" context:nil];
...
}
업로드 관리자 클래스에서 '진행'속성이 변경 될 때마다 iOS는 observerValueForKeyPath:ofObject:change:context:
함수를 호출합니다. 다음은 매우 단순한 버전입니다.
-(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if ([keyPath isEqualToString:@"progress"])
{
// since you only upload a single file, and you've only added yourself as
// an observer to your upload, there's no mystery as to who has sent you progress
float progress=[change valueForKey:NSKeyValueChangeNewKey];
NSLog(@"operation:%@ progress:%0.2f", object, progress);
// now you'd update the progress control via a property bound in the nib viewer
[[_view progressIndicator] setProgress:progress];
}
else
{
[super observeValueForKeyPath:keyPath ofObject:object change:change context:context];
}
}
그게 도움이 되었으면 좋겠어요.