新聞中心
SDWebImage 是一個(gè)常用的圖像下載和緩存庫,用于 iOS 和 macOS 應(yīng)用程序,它提供了一個(gè) UIImageView 類的擴(kuò)展,可以輕松地加載和緩存網(wǎng)絡(luò)圖片,在使用 Xcode 6 編譯 SDWebImage 時(shí),開發(fā)者可能會(huì)遇到一些報(bào)錯(cuò),如 "Use of undeclared identifier ‘executing’" 和 "Use of undeclared identifier ‘finished’",本文將對(duì)這個(gè)問題進(jìn)行詳細(xì)分析,并提供解決方法。

成都服務(wù)器托管,創(chuàng)新互聯(lián)提供包括服務(wù)器租用、德陽機(jī)房服務(wù)器托管、帶寬租用、云主機(jī)、機(jī)柜租用、主機(jī)租用托管、CDN網(wǎng)站加速、申請(qǐng)域名等業(yè)務(wù)的一體化完整服務(wù)。電話咨詢:18980820575
我們來分析這個(gè)問題的原因,在 SDWebImage 庫的 SDWebImageDownloaderOperation 類中,通常會(huì)聲明兩個(gè)屬性:executing 和 finished,這兩個(gè)屬性用于表示操作是否正在執(zhí)行和是否已經(jīng)完成,當(dāng)你在 Xcode 6 中編譯這個(gè)類時(shí),可能會(huì)遇到“未聲明標(biāo)識(shí)符”的錯(cuò)誤。
為什么會(huì)出現(xiàn)這個(gè)錯(cuò)誤呢?實(shí)際上,這與 NSOperation 類有關(guān),SDWebImageDownloaderOperation 繼承自 NSOperation 類,而 NSOperation 類中已經(jīng)聲明了兩個(gè)同名的只讀屬性:executing 和 finished,在 ObjectiveC 中,子類不能直接覆蓋父類的只讀屬性,在 SDWebImageDownloaderOperation 類中直接修改這兩個(gè)屬性會(huì)導(dǎo)致編譯錯(cuò)誤。
如何解決這個(gè)問題呢?下面提供一個(gè)簡單的解決方法:
在 SDWebImageDownloaderOperation 類的實(shí)現(xiàn)文件(.m文件)中,使用@synthesize關(guān)鍵字來合成屬性的 getter 和 setter 方法,這樣,編譯器就不會(huì)報(bào)錯(cuò)了。
具體操作如下:
1、打開 SDWebImageDownloaderOperation.m 文件。
2、在 @implementation SDWebImageDownloaderOperation 下方添加以下代碼:
@synthesize executing = _executing; @synthesize finished = _finished;
這兩行代碼告訴編譯器,我們要手動(dòng)實(shí)現(xiàn) _executing 和 _finished 變量的存取方法。
接下來,我們需要在 SDWebImageDownloaderOperation 類的實(shí)現(xiàn)中,手動(dòng)為這兩個(gè)屬性提供 getter 和 setter 方法。
(BOOL)isExecuting {
return _executing;
}
(void)setExecuting:(BOOL)executing {
_executing = executing;
}
(BOOL)isFinished {
return _finished;
}
(void)setFinished:(BOOL)finished {
_finished = finished;
}
通過以上修改,我們就可以在 SDWebImageDownloaderOperation 類中正常使用 executing 和 finished 屬性了。
需要注意的是,這個(gè)錯(cuò)誤在老版本的 Xcode 中可能并不會(huì)出現(xiàn),這是因?yàn)槔习姹镜?Xcode 對(duì) readonly 屬性的處理方式有所不同,在 Xcode 6 中,編譯器對(duì) readonly 屬性進(jìn)行了優(yōu)化,導(dǎo)致子類無法直接修改父類的只讀屬性,在使用 Xcode 6 或更高版本編譯 SDWebImage 時(shí),我們需要采用上述方法解決這個(gè)問題。
在使用 SDWebImage 時(shí),遇到“未聲明標(biāo)識(shí)符”的編譯錯(cuò)誤,我們可以通過在 SDWebImageDownloaderOperation 類中手動(dòng)實(shí)現(xiàn)屬性的 getter 和 setter 方法來解決,這個(gè)方法不僅能解決問題,還能讓我們更好地理解 ObjectiveC 的繼承和屬性覆蓋機(jī)制,希望本文能幫助大家順利解決在使用 SDWebImage 過程中遇到的這個(gè)問題。
網(wǎng)頁題目:sdwebimage使用報(bào)錯(cuò)
標(biāo)題路徑:http://www.dlmjj.cn/article/dhgepgo.html


咨詢
建站咨詢
