2012-06-27 134 views
1

我有一個SourceViewControllerDesViewController,有一個在DesViewController一個變量:@property (nonatomic , assign , readwrite) NSString* name ;不能設置屬性

但在這裏,當我打電話的方法SourceViewController一個問題:

-(void)performSegueWithIdentifier:(NSString *)identifier sender:(id)sender { 
    UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil ] ; 
    DestinationViewController* desViewController = [storyboard instantiateInitialViewController ] ; 
    desViewController.name = @"haah" ; 
    [self presentViewController:desViewController animated:YES completion:nil ] ; 
} 

的輸出:

'NSInvalidArgumentException', reason: '-[SourceViewController setName:]: unrecognized selector sent to instance 0x6a0d7c0' 

任何人都可以幫助我嗎?

+0

確定初始視圖控制器設置爲'DesViewController'而不是'SourceViewController'? – Vervious

+0

也許不是,我該如何解決這個問題 – Weizhi

+0

你是否在App Delegate中?如果是這種情況,往往會出現問題。 – achi

回答

0

現在,你實例化的viewcontroller似乎不是類DestinationViewcontroller(因爲你的初始viewController似乎不是那個類)。所以它沒有那個屬性。你必須實例化正確的類(見下文)。 同時檢查您是否在DestinationViewcontroller的實現中合成了該屬性。

並在旁邊注意:儘管您可能想要簡單地將字符串變量分配給新值,但大多數時候您希望使用副本而不是在NStrings上分配。此外,由於其默認行爲,所以不需要讀寫。 因此,更好地改變你的財產申報正是如此:

@property (nonatomic, copy) NSString *name; 

而且在實施檢查,如果你合成例如像這樣:

@synthesize name = _name; 

而在你的dealloc:

[_name release]; 

而且,如果您統計新項目,請考慮使用ARC。

現在,如果您將viewController設置爲DestinationViewcontroller,它應該可以工作。獲得 最好的辦法是將

DestinationViewcontroller *dc = [storyboard instantiateViewControllerWithIdentifier:@"identifier of your desviewcontroller"]; 
0

您正在初始化SourceViewController上的房產,同時嘗試從DestinationViewController加入。

您需要爲DestinationViewController創建屬性。

1

的下面行代碼:

[storyboard instantiateInitialViewController ] ; 

它返回SourceViewController。這是因爲它被設置爲你的初始viewController。 但是,您將其視爲DestinationViewController。因此,這個問題。

請更改您的初始控制器或聲明併合成屬性SourceViewController

+0

是的,最好查看[storyboard instantiateInitialViewController]返回的內容。您可以輕鬆地通過將對象接受爲一個id來完成此操作,然後相應地進行轉換。 – Tarun

+0

我解決了,謝謝 – Weizhi