0
有沒有願意幫助我解決這個問題的人?RACSignal:不執行RACSignal代碼
這是我的情景:
我需要形式的附件上傳到服務器。因此,這裏的步驟:
使用Web服務從服務器檢索附件頭。
將附件標題與本地附件匹配。
上傳附件到服務器。
問題:
使用RACSignal我可以成功地獲得附加的信息,但是當它的時間來上傳使用的NSArray的UploadFormItemAttachments方法將不執行的內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];
}