2016-01-20 148 views
0

我正在寫一個測驗應用程序,並有一個表視圖添加一個主題(名稱保存到核心數據),當您選擇一個索引路徑它通過受到詳細視圖控制器的限制(這個工作本身就很好),但是我遇到的麻煩是檢查是否存在任何卡(主體實體具有「卡」的NSOrderedSet)。在我的兩次嘗試中,我一直在崩潰,我之前用關係和tableViews在swift中完成了它,並且一直很好,所以我不確定這裏存在什麼問題。感謝您一如既往的幫助!問題檢查,看看是否存在一個值Swift 2

我第一次嘗試,雖然它說:「catch塊不可訪問,因爲任何錯誤都是扔在做塊」,它與上線「壞指令」崩潰後「做」

do { 
     if let firstCard = self.subject?.cards![0] as? Card { 
      self.currentCard = firstCard 
     } 
    } catch { 


    } 

我的第二次嘗試,它崩潰的第一行

if let firstCard = self.subject?.cards![0] as? Card { 
     self.currentCard = firstCard 
    } 

我的第三次嘗試

if self.subject!.cards != nil { 

     self.currentCard = self.subject!.cards![0] as! Card 
    } 

我的第四次嘗試,展開雙方的學科屬性和學科,它不會響起self.subject.cards但仍然崩潰

if let firstCard = self.subject!.cards?[0] as? Card { 
     self.currentCard = firstCard 
    } 

,其中屬性聲明

var draggableView = DraggableView!() 
var subject : Subject? 
var currentCard : Card? 
var cardArray = [Card]() 

與標的方法的更新(完美的作品,但把它放在這裏僅供參考),主題是從另一個類傳遞的,並且在視圖頂部調用的這個方法確實加載了。

func updateWithSubject(subject: Subject) { 

    if let subject = self.subject { 
     self.subject = subject 
    } 
} 
+0

在你嘗試所有四個,你做一個「逼」在某些時候解開('!'),這通常是可以避免的。另外,你也可以使用'.first'(可選)屬性來代替顯式地嘗試訪問數組中的索引'0'。如果你的數組是空的,訪問'[0]'會產生一個運行時異常。你可以試試'如果讓firstCard = self.subject?.cards?.first ...'。 (另外,'Subject'類/結構體的'.cards'屬性不是'Card'對象?想知道類型轉換爲'Card'。) – dfri

+0

它說NSOrderedSet沒有「first」成員,會是什麼將集合轉換爲數組的最佳方法是什麼? – Echizzle

+1

我的不好,我認爲'Subject'的'.cards'屬性是'Card'對象的數組(你沒有向我們展示'Subject'類/結構體......但我現在看到你寫了這個文本)。無論如何,'NSOrderedSet'有一個屬性'.array',_「將有序集合表示爲一個數組。(只讀)」_,所以我想你可以使用'if firstCard = self.subject?.cards ?.array.first ...'。 – dfri

回答

1

在所有的四次嘗試中,您都會在某個時間點進行「強制」解包(!),這通常要避免。此外,您試圖明確訪問您的NSOrderedSet中的索引0;如果該集合爲空,則訪問[0]將產生運行時異常。

相反,你可以使用NSOrderedSet.array表示和使用陣列的.first(可選)財產安全接入測試:

if let firstCard = self.subject?.cards?.array.first ... 
0

我認爲你的updateWithSubject方法有一些尷尬。您正在檢查是否有一個主題在分配給它之前已經被初始化。如果這是在您的viewDidLoad中,並且只在那裏,那麼分配將不會發生。之後的強制解包將會失敗。

+0

也許,但是當我用相同的方法打印(self.subject.name)時它工作 – Echizzle

+0

我們可以看到更多的'viewDidLoad'嗎?我想知道它是如何被傳入的。 – mango