2017-03-18 58 views
0

我有2個ViewControllers,第一個ViewController出現後,第一個有一個由獲取請求填充的數組。第二個ViewController具有對該數組的引用。然而,那是在被填充之前引用一個空數組。
一旦數組被填充,我想獲得一個引用。這是一個片段。在事件發生後訪問另一個視圖控制器的屬性

class VC1: UIViewController { 
    let coreDataObjects = [NSManagedObject]() //At this moment, this array is empty 
    func viewWillAppear { 
     fetchRequestThatFillsTheArray() //Here, the array is filled 
    } 
    fetchRequestThatFillsTheArray() { 
     //calling NSFetchRequest 
    } 
} 

class VC2: UIViewController { 
    let vc1 = VC1() 
    vc1.coreDataObjects //Empty array 
} 

謝謝。

+0

你知道viewDidLoad和viewWillAppear之間的區別嗎?什麼是fetchRequestThatFillsTheArray? –

+0

@ElTomato我編輯的代碼片斷更清晰,但是,fetchRequestThatFillsTheArray()是一個提取請求,將請求的結果分配給數組。 (),viewWillAppear()和viewDidAppear() – MEnnabah

+0

事實上,我不認爲任何人都可以回答你的問題,而不是讓野性假設。你不告訴VC1和VC2之間的關係。我們不知道他們是否居住在同一個故事板上。我們甚至不知道你是否首先使用故事板。我們不知道您是否正在使用segue從一個視圖控制器轉換到另一個視圖控制器。 –

回答

1

這裏是解決方案:

class VC1: UIViewController { 
    lazy var coreDataObjects = fetchRequestThatFillsTheArray() 

    func fetchRequestThatFillsTheArray() { 
     //calling NSFetchRequest 
    } 
} 

如果你仍然想在原代碼的解決方案,或者你有問題lazy使用fetchRequestThatFillsTheArray()。您必須使用NSNotification。閱讀Notification Programming Topics

---的評論更新----

你應該改變你的代碼中使用一點。

class VC1: UIViewController { 
    lazy var coreDataObjects:[NSManagedObject] = self.fetchRequestThatFillsTheArray() 

    func fetchRequestThatFillsTheArray() -> [NSManagedObject] { 
     //calling NSFetchRequest 
    } 
} 

但是,因爲你在fetchRequestThatFillsTheArray()使用self.property,您不能使用此解決方案。您需要使用NSNotification。這意味着您在fetchRequestThatFillsTheArray()完成時發送通知。並在vc2中註冊通知。當vc2收到通知時,它會按照自己的意願進行操作。

+0

那麼coreDataObjects現在不是一個數組?無論如何,這就是我使用你的解決方案時得到的結果:不能在屬性初始化器中使用實例成員'fetchRequestThatFillsTheArray';屬性初始化器在'self'可用之前運行。 – MEnnabah

+0

我更新答案中的答案。 –

+0

感謝您的幫助,我會閱讀通知文檔,無論如何,我不會在fetchRequestThatFillsTheArray()中使用self.property。我可能會在代碼的另一部分使用它,會影響延遲初始化嗎? – MEnnabah

相關問題