Task#2–1[Debug:Lazy Properties、attempt to insert row 0 into section 0 , but there are only 0 rows in section 0 after the update]

影山小麥機
Jul 28, 2021

談談Todo-list中遇到的難題

前言

在這次Todo-list中由於要把Massive ViewController切成MyView、ViewController兩塊,花了我不少時間。

以下會將我遇到的問題紀錄在下面

  1. LazyProperties的特性
  2. Thread:attempt to insert row 0 into section 0 , but there are only 0 rows in section 0 after the update

正文

1.關於LazyProperties

報錯:不能使用該實例成員”height”在屬性建構器之內
為bmi加上lazy之後,就不會報錯了。

總之,同樣是在Baby這個類別底下的屬性,由於weight、height都有賦值,所以在這件事情上,bmi並沒有值在裡面,但是,由於class自帶建構器,所以一但你給定屬性一個數值,它就自動被建構完成了,而在上例之中,bmi並沒有被賦值,所以在這裡面,它並沒有被初始化,也會報錯,因為它內部的兩個值:weight、height還沒有被執行,因此它沒有值在裡面。

而lazy的用意就是讓該屬性“被需要”的時候,才被調用、初始化。或許更進一步說,是它並沒有在Run之後就被讀取

因為這樣的設置,所以bmi的計算是被需要的時候,才會初始化,因為它並沒有被賦值。

所以,在Task2中:

tableView這個東西,我目前把它分配於MyView中,MyView裡面包含了跟畫面有關的擴展,而實際上由於畫面要顯示東西出來,需要更新畫面上的cell,所以在ViewController中,有使用tableView.reload會在調用到的時候更新。

Info之所以不能使用lazy屬性的理由,我認為應該是它的資料存放狀態一直都是在使用中的,所以它不能因為lazy而緩速存取資料,也因為它在修改的時候是處於已經賦值的狀態,所以裡面就已經有值了。

2. Thread:attempt to insert row 0 into section 0 , but there are only 0 rows in section 0 after the update

這個問題主要是這樣:tableView並沒有接收到任何的行列,也就是說,有可能是資料傳入出了問題,或者是案件創造的事件沒辦法讓值被顯示在上面。

這邊的錯誤是基於再更新之後,並沒有東西傳入TableView,我剛開始的時候是懷疑TableView有問題,但後來仔細想想,應該是資料儲存、供應端有問題,所以就回去看info的狀況

而當時的info是放在ViewController中,我把它命名成:lazy var infoArray = myView.info

也就是說,我這邊在一開始的時候並不調用它,而是在插入使用過後才調用。但這樣的結果也造成了“在TableView更新之後,傳入零個section、零個row,什麼都沒有。

但我後來把在myView中的info在ViewController之中直接以myView.info的方式進行使用,這就讓整個程式可以順利Run了。

所以,當時出現在這裡錯誤,我想應該就是infoArray什麼都沒有提供給tableView去顯示東西,所以才產生的問題。

所以下次遇到這個問題,大概可以先往資料供應端看看,因為tableView從畫面設定到擴展原則上不會有什麼問題,應該先往資料為什麼沒有顯示來按圖索驥。

小記:

這次的debug經驗其實還算不錯,我覺得是這樣:

  1. 不要太快去問人找答案,先查查網路上的說法,StackOverFlow會給你震撼教育,有時候看到網友討論這個問題的時候,反而就是個很好的機會去思考與推理問題。
  2. 羊毛出在羊身上,你的程式碼有問題,要循著Xcode給出的提示去想哪個環節出了問題,進而是推理,像我以為是tableView出問題,但結果是info陣列出問題,那時候原本已經要睡了,但躺下後這個推理的思路不停在我腦袋裡轉,結果爬起來後,真的就把它給解掉了。

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

影山小麥機
影山小麥機

Written by 影山小麥機

本職為Mobile工程師,熱愛分享視野,也樂意站在ChatGPT的肩膀上。訂閱小麥機,收割技術、職涯、人生的難題。

No responses yet

Write a response