2016-11-12 20 views
0

この問題をお手伝いできる喜んでいる魂がありますか?私は、サーバーへのフォームの添付ファイルをアップロードする必要がRACSignal:RACSignalコードが実行されていません

は、これは私のシナリオです。したがって、次の手順があります。

  1. Webサービスを使用してサーバーから添付ヘッダーを取得します。

  2. 添付ファイルのヘッダーとローカル添付ファイルを一致させます。

  3. 添付ファイルをサーバーにアップロードします。

問題:それは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]; 
} 

答えて

0

uploadFormItemAttachmentsので、リターンがRACSignalあなたがflattenMap代わりmap

を使用する必要があります
関連する問題