首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RACSignal:没有执行RACSignal代码

RACSignal:没有执行RACSignal代码
EN

Stack Overflow用户
提问于 2016-11-12 04:06:24
回答 1查看 93关注 0票数 0

有一个愿意帮助我解决这个问题的人吗?

--这是我的场景:

我需要上传表单附件到服务器。下面是几个步骤:

  1. 使用Web服务从服务器检索附件标头。
  2. 将附件标头与本地附件匹配。
  3. 将附件上载到服务器。

问题:

使用RACSignal,我可以成功地获得附件头,但是当使用NSArray上传附件时,UploadFormItemAttachments方法的内部RACSignal将不会执行。

附加信息:

这是显示如何处理RACSignals的代码片段。永远不会执行BatchSignal!:

代码语言:javascript
复制
[[[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.
        }
     ];

这是迭代附件数组并将其上载到服务器的方法:

代码语言:javascript
复制
- (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];
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-11-13 05:17:57

由于uploadFormItemAttachments返回RACSignal,所以应该使用flattenMap而不是map

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40559468

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档