Tencent / mars

Mars is a cross-platform network component developed by WeChat.
Other
17.29k stars 3.63k forks source link

[iOS/Mac sample bug] 任务调用顺序问题 #539

Open moky opened 5 years ago

moky commented 5 years ago

应该先 addObserver: 然后再 StartTask(),否则会发生 Request2BufferWithTaskID:uiObserver 为空的情况。 调整如下(将 mars::stn::StartTask(ctask); 后移3行):

- (int)startTask:(CGITask *)task ForUI:(id<UINotifyDelegate>)delegateUI {
    Task ctask;
    ctask.cmdid = task.cmdid;
    ctask.channel_select = task.channel_select;
    ctask.cgi = std::string(task.cgi.UTF8String);
    ctask.shortlink_host_list.push_back(std::string(task.host.UTF8String));
    ctask.user_context = (__bridge void*)task;

    // mars::stn::StartTask(ctask);

    NSString *taskIdKey = [NSString stringWithFormat:@"%d", ctask.taskid];
    [_delegate addObserver:delegateUI forKey:taskIdKey];
    [_delegate addCGITasks:task forKey:taskIdKey];

    mars::stn::StartTask(ctask);

    return ctask.taskid;
}

iOS & Mac 的例子均有出现(Bussiness/NetworkService.mm)。

lilong7676 commented 5 years ago

NetworkService.mm 中 Request2BufferWithTaskID 方法内有一行 CGITask task = (__bridge CGITask )context; 偶尔会在这里报bad access,不知是否和上面问题一样。 报错:mars::stn (28): EXC_BAD_ACCESS (code=1, address=0x20)

garryyan commented 5 years ago

是的 这里有问题 欢迎往 develop 分支上提个 pr?