この問題をお手伝いできる喜んでいる魂がありますか?私は、サーバーへのフォームの添付ファイルをアップロードする必要がRACSignal:RACSignalコードが実行されていません
:
は、これは私のシナリオです。したがって、次の手順があります。
Webサービスを使用してサーバーから添付ヘッダーを取得します。
添付ファイルのヘッダーとローカル添付ファイルを一致させます。
添付ファイルをサーバーにアップロードします。
問題:それはNSArrayの実行されませんUploadFormItemAttachmentsメソッドの内部RACSignalを使用して添付ファイルをアップロードする時が来たとき、私は成功した添付ファイルのヘッダを取得することができますが、RACSignalを使用
。
追加情報:
これはRACSignalsがどのように処理されるかを示すコードスニペットです。 BatchSignalが実行されることはありません!:
[[[self getFormItemAttachmentHeaders:listName
topListItemID:form.topListItemID
form:form
] map:^id(NSMutableArray* value) {
NSArray* attachmentHeaders = [value copy];
// the code of uploadFormItemAttachments is called but the inner signal does not execute. Why?
return [self uploadFormItemAttachments:pendingAttachments
attachmentHeaders:attachmentHeaders
form:form];
}
] subscribeNext:^(id value) {
// I was expecting the completion result form uploadFormItemAttachments here.
}
];
このサーバーへの添付ファイルの配列を反復処理し、アップロード、それは方法:
- (RACSignal *)uploadFormItemAttachments:(NSArray*)pendingAttachments attachmentHeaders:(NSArray*)attachmentHeaders form:(SEFSManagedForm*)form
{
RACSignal* batchSignal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
[attachmentHeaders enumerateObjectsUsingBlock:^(SEFSFormItemAttachmentHeader* attachmentHeader, NSUInteger idx, BOOL *stop)
{
// Look for the local attachment using attachment header from server
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"identifier = %@", attachmentHeader.document];
NSArray* foundAttachment = [pendingAttachments filteredArrayUsingPredicate:predicate];
SEFSManagedAttachment* fullAttachment = foundAttachment[0];
RACSignal* uploadFormItemAttachmentSignal = [[self uploadFormItemAttachment:fullAttachment
attachmentHeader:attachmentHeader ] map:^id(NSNumber* value) {
NSMutableArray* valuesArray = [NSMutableArray array];
[valuesArray addObject:value];
[valuesArray addObject:attachmentHeader.document];
RACTuple* tuple = [RACTuple tupleWithObjectsFromArray:valuesArray
convertNullsToNils:YES];
return tuple;
}];
[subscriber sendNext:uploadFormItemAttachmentSignal];
}];
[subscriber sendCompleted];
return nil;
}];
return [batchSignal flatten:2];
}