weex 集成到iOS項(xiàng)目中報(bào)錯(cuò)

問題描述

首次在項(xiàng)目中集成weex的SDK(sdk版本是0.8.0市埋,Xcode 8),但是出現(xiàn)一些問題秉撇,

1. sdk放在podfile同級(jí)出現(xiàn)各種編譯不過

這個(gè)問題沒有截圖灵迫,主要是由于 Test里面的代碼,會(huì)有很多非arc的代碼蚕愤,后來我仿照playground的格式答恶,將sdk代碼放到項(xiàng)目根目錄的外面,可以順利解決編譯不過的問題

2. js文件加載不出來

當(dāng)我集成好了sdk萍诱,做好初始化悬嗓,去實(shí)例化一個(gè)_instance,去加載一個(gè)已經(jīng)編譯好的js文件時(shí)裕坊,出現(xiàn)以下錯(cuò)誤<Weex>[info]WXBridgeContext.m:292, No send queue for instance:1, may it has been destroyed so method:fireEvent is ignored [;并且所有的渲染工作都沒有做

我將同樣的js文件放到playground中包竹,就可以順利的渲染成功,一直都不明白該如何解決籍凝,找到最近一次打印的代碼周瞎,

- (void)executeJsMethod:(WXBridgeMethod *)method
{
    WXAssertBridgeThread();
    
    if (!method.instance) {
        WXLogError(@"Instance doesn't exist!");
        return;
    }
    
    NSMutableArray *sendQueue = self.sendQueue[method.instance];
    if (!sendQueue) {
        WXLogInfo(@"No send queue for instance:%@, may it has been destroyed so method:%@ is ignored", method.instance, method.method);
        return;
    }
    
    [sendQueue addObject:method];
    [self performSelector:@selector(_sendQueueLoop) withObject:nil];
}

該問題還未解決,解決后來更新答案


更新

對(duì)比了一下饵蒂,playground和自己項(xiàng)目的代碼流程声诸,貌似項(xiàng)目中的代碼,網(wǎng)絡(luò)請(qǐng)求滅有回調(diào)

__block NSURLResponse *urlResponse;
        [networkHandler sendRequest:request
                   withSendingData:^(int64_t bytesSent, int64_t totalBytes) {}
                      withResponse:^(NSURLResponse *response) {
                          urlResponse = response;
                      }
                   withReceiveData:^(NSData *data) {}
                   withCompeletion:^(NSData *totalData, NSError *error) {
            //TODO 304
            if (!error && [urlResponse isKindOfClass:[NSHTTPURLResponse class]] && ((NSHTTPURLResponse *)urlResponse).statusCode != 200) {
                error = [NSError errorWithDomain:WX_ERROR_DOMAIN
                                            code:((NSHTTPURLResponse *)urlResponse).statusCode
                                        userInfo:@{@"message":@"status code error."}];
            }
            
            if (error) {
                NSString *errorMessage = [NSString stringWithFormat:@"Connection to %@ occurs an error:%@", request.URL, error.localizedDescription];
                WX_MONITOR_FAIL_ON_PAGE(WXMTJSDownload, WX_ERR_JSBUNDLE_DOWNLOAD, errorMessage, weakSelf.pageName);
                
                if (weakSelf.onFailed) {
                    weakSelf.onFailed(error);
                }
                return;
            }
                       
            if (!totalData) {
                NSString *errorMessage = [NSString stringWithFormat:@"Connection to %@ but no data return", request.URL];
                WX_MONITOR_FAIL_ON_PAGE(WXMTJSDownload, WX_ERR_JSBUNDLE_DOWNLOAD, errorMessage, weakSelf.pageName);
                
                if (weakSelf.onFailed) {
                    weakSelf.onFailed(error);
                }
                return;
            }
                       
            NSString *script = [[NSString alloc] initWithData:totalData encoding:NSUTF8StringEncoding];
            if (!script) {
                WX_MONITOR_FAIL_ON_PAGE(WXMTJSDownload, WX_ERR_JSBUNDLE_STRING_CONVERT, @"data converting to string failed.", weakSelf.pageName)
                return;
            }
            
            WX_MONITOR_SUCCESS_ON_PAGE(WXMTJSDownload, weakSelf.pageName);
            WX_MONITOR_INSTANCE_PERF_END(WXPTJSDownload, weakSelf);

            [weakSelf renderView:script options:newOptions data:data];
        }];

再次更新

經(jīng)過多次調(diào)試發(fā)現(xiàn)以下問題:

    WX_MONITOR_INSTANCE_PERF_START(WXPTJSDownload, self);
        
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setValue:[WXUtility userAgent] forHTTPHeaderField:@"User-Agent"];
        [request setValue:@"weex" forHTTPHeaderField:@"f-refer"];
        
        id<WXNetworkProtocol> networkHandler = [self networkHandler];
        
        __block NSURLResponse *urlResponse;
        [networkHandler sendRequest:request
                   withSendingData:^(int64_t bytesSent, int64_t totalBytes) {}
                      withResponse:^(NSURLResponse *response) {
                          urlResponse = response;
                      }
                   withReceiveData:^(NSData *data) {}
                   withCompeletion:^(NSData *totalData, NSError *error) {
            //TODO 304
            if (!error && [urlResponse isKindOfClass:[NSHTTPURLResponse class]] && ((NSHTTPURLResponse *)urlResponse).statusCode != 200) {
                error = [NSError errorWithDomain:WX_ERROR_DOMAIN
                                            code:((NSHTTPURLResponse *)urlResponse).statusCode
                                        userInfo:@{@"message":@"status code error."}];
            }
            
            if (error) {
                NSString *errorMessage = [NSString stringWithFormat:@"Connection to %@ occurs an error:%@", request.URL, error.localizedDescription];
                WX_MONITOR_FAIL_ON_PAGE(WXMTJSDownload, WX_ERR_JSBUNDLE_DOWNLOAD, errorMessage, weakSelf.pageName);
                
                if (weakSelf.onFailed) {
                    weakSelf.onFailed(error);
                }
                return;
            }
                       
            if (!totalData) {
                NSString *errorMessage = [NSString stringWithFormat:@"Connection to %@ but no data return", request.URL];
                WX_MONITOR_FAIL_ON_PAGE(WXMTJSDownload, WX_ERR_JSBUNDLE_DOWNLOAD, errorMessage, weakSelf.pageName);
                
                if (weakSelf.onFailed) {
                    weakSelf.onFailed(error);
                }
                return;
            }
                       
            NSString *script = [[NSString alloc] initWithData:totalData encoding:NSUTF8StringEncoding];
            if (!script) {
                WX_MONITOR_FAIL_ON_PAGE(WXMTJSDownload, WX_ERR_JSBUNDLE_STRING_CONVERT, @"data converting to string failed.", weakSelf.pageName)
                return;
            }
            
            WX_MONITOR_SUCCESS_ON_PAGE(WXMTJSDownload, weakSelf.pageName);
            WX_MONITOR_INSTANCE_PERF_END(WXPTJSDownload, weakSelf);

            [weakSelf renderView:script options:newOptions data:data];
        }];

在我的項(xiàng)目中退盯,當(dāng)程序執(zhí)行到這個(gè)請(qǐng)求js文件的網(wǎng)絡(luò)方法時(shí)彼乌,不會(huì)走WXNetworkDefaultImpl中的創(chuàng)建請(qǐng)求的方法:

- (id)sendRequest:(NSURLRequest *)request withSendingData:(void (^)(int64_t, int64_t))sendDataCallback
                                             withResponse:(void (^)(NSURLResponse *))responseCallback
                                          withReceiveData:(void (^)(NSData *))receiveDataCallback
                                          withCompeletion:(void (^)(NSData *, NSError *))compeletionCallback
{
    WXNetworkCallbackInfo *info = [WXNetworkCallbackInfo new];
    info.sendDataCallback = sendDataCallback;
    info.responseCallback = responseCallback;
    info.receiveDataCallback = receiveDataCallback;
    info.compeletionCallback = compeletionCallback;
    
    if (!_session) {
        _session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]
                                                 delegate:self
                                            delegateQueue:[NSOperationQueue mainQueue]];
    }
    
    NSURLSessionDataTask *task = [_session dataTaskWithRequest:request];
    if (!_callbacks) {
        _callbacks = [NSMutableDictionary dictionary];
    }
    [_callbacks setObject:info forKey:task];
    [task resume];
    
    return task;
}

所以導(dǎo)致js文件請(qǐng)求根本就沒有發(fā)出來,就去執(zhí)行了WXBridgeContext.m中的得问,下列代碼囤攀,由于sendQueue = nil然后結(jié)束了運(yùn)行

- (void)executeJsMethod:(WXBridgeMethod *)method
{
    WXAssertBridgeThread();
    
    if (!method.instance) {
        WXLogError(@"Instance doesn't exist!");
        return;
    }
    
    NSMutableArray *sendQueue = self.sendQueue[method.instance];
    if (!sendQueue) {
        WXLogInfo(@"No send queue for instance:%@, may it has been destroyed so method:%@ is ignored", method.instance, method.method);
        return;
    }
    
    [sendQueue addObject:method];
    [self performSelector:@selector(_sendQueueLoop) withObject:nil];
}

表示求同學(xué)解答下哈,實(shí)在是有點(diǎn)不太明白宫纬,我的所有配置和playground中一致焚挠,為啥會(huì)出現(xiàn)這樣的情況呢


解決了 這是一個(gè)尷尬的結(jié)果

是因?yàn)槲覍懙某跏蓟痵dk的方法沒有調(diào)用 : )

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市漓骚,隨后出現(xiàn)的幾起案子蝌衔,更是在濱河造成了極大的恐慌,老刑警劉巖蝌蹂,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件噩斟,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡孤个,警方通過查閱死者的電腦和手機(jī)剃允,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人斥废,你說我怎么就攤上這事椒楣。” “怎么了牡肉?”我有些...
    開封第一講書人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵捧灰,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我统锤,道長(zhǎng)毛俏,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任饲窿,我火速辦了婚禮煌寇,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘免绿。我一直安慰自己唧席,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開白布嘲驾。 她就那樣靜靜地躺著淌哟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪辽故。 梳的紋絲不亂的頭發(fā)上徒仓,一...
    開封第一講書人閱讀 51,301評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音誊垢,去河邊找鬼掉弛。 笑死,一個(gè)胖子當(dāng)著我的面吹牛喂走,可吹牛的內(nèi)容都是我干的殃饿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼芋肠,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼乎芳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起帖池,我...
    開封第一講書人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤奈惑,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后睡汹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肴甸,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年囚巴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了原在。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片友扰。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖晤斩,靈堂內(nèi)的尸體忽然破棺而出焕檬,到底是詐尸還是另有隱情,我是刑警寧澤澳泵,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站兼呵,受9級(jí)特大地震影響兔辅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜击喂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一维苔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧懂昂,春花似錦介时、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至铲敛,卻和暖如春褐澎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背伐蒋。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工工三, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人先鱼。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓俭正,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親焙畔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子掸读,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容