2015-01-13 64 views
3

我在做一個簡單的WatchKit應用程序。我有一個在第一個InterfaceController中值爲0的golbal int變量。爲什麼我不能在WatchKit中更改全局變量的值 - swift?

這是我的第一個接口:

import WatchKit 
import Foundation 
import UIKit 

var index:Int = 0 

class InterfaceController: WKInterfaceController { 

    ..... 
} 

在secondView接口我想改變這個全局變量的值:

import UIKit 
import WatchKit 

class secondInterfaceController: WKInterfaceController { 


    override init(context: AnyObject?) { 
     // Initialize variables here. 
     super.init(context: context) 

     // Configure interface objects here. 
     NSLog("%@ init", self) 

     println("index: \(index)") 

     index = 2 


    } 


} 

但是我收到一個錯誤:「無法分配給這個表達式的結果「用於變量索引。我不知道爲什麼,我想知道如何做到這一點。我可以更改IOS應用程序的全局變量的值。謝謝

回答

0

我找到了解決方案。當你想在接口中使用全局變量時,必須將所有接口設置爲相同的「目標成員」

+0

此解決方案與全局變量無關......如果您的兩個接口控制器位於不同的目標中,則不能在未安裝目標的目標中使用該類的任何方面。這實際上不應該是標記爲您最初提出問題的解決方案。 –

+0

例如,我在我的第一個接口控制器中有一個全局變量,此接口控制器有2個目標成員爲「IOS應用程序」和「watchkit應用程序」。如果我的第二個界面控制器只有一個目標「watchkit app」,並且我不能使用這個全局變量。但是,如果我添加更多目標「IOS應用程序」到我的第二個控制器,我可以使用該全局值。這就是我的答案。 –

2

我轉載了你的代碼來測試這個問題,打算測試潛在的解決方案。相反,我確認這個問題不可重現。

爲了能夠運行代碼,我必須將其更改爲override func awakeWithContext(context: AnyObject?)。從BETA4今天發佈的兩個beta3版的發行說明和:

The WKInterfaceController method initWithContext: has been deprecated. Please use awakeWithContext: instead. The designated initializer for WKInterfaceController is now init.

考慮您的代碼使用init(context: AnyObject?),你是不是收到此錯誤信息:

Initializer does not override a designated initializer from its superclass

...它表明你正在使用早於測試版3的Xcode 6.2的版本。因此,可能在早期測試版中存在導致問題的錯誤。更新到今天的beta4版本並重新測試這個問題將是非常明智的。


在相關筆記,有很多程序員誰也認爲,使用全局變量是很不利的,而且使用的另一種方法,即使是單身,是優選的。我只是提請你注意,看看你是否還沒有就這次辯論形成意見。

+0

非常感謝您的回覆,所以我想知道如何將數據從一個接口發送到另一個接口接口併發送回另一個接口?我知道我可以發送帶有上下文選項的數據,但我不知道如何將數據發回到以前的接口。我怎樣才能做到這一點? –

+0

針對具體問題的重大問題,然後我們可以回答。歡迎來到Stack Overflow。請注意,如果此答案幫助您解決問題,則應點擊答案旁邊的勾號將其標記爲已接受。即使你沒有足夠的聲望來讚揚,你也可以隨時接受你自己問題的答案。 :) –

相關問題