2011-07-08 48 views
0

我有此變量的視圖控制器:變量(IBOutlet中的UITextView),在一些方法中工作,但不是其他

IBOutlet UITextView* chat 

它工作在類的一些方法,但不例如在該方法中「聊天」像我想的功能它應該:

// We are being asked to display a chat message 
- (void)displayChatMessage:(NSString*)message fromUser:(NSString*)userName ofType:(NSString*)type withKey:(NSString*)key { 

    [chat appendTextAfterLinebreak:[NSString stringWithFormat:@"%@: %@", userName, message]]; 
    [chat scrollToBottom]; 

    NSLog(@"stuff to us %@: %@ type: %@", userName, message, type); 

} 

其他像這樣的它沒有:

- (BOOL)textFieldShouldReturn:(UITextField *)theTextField { 
    if (theTextField == input) { 
     // processs input 
     [chatRoom broadcastChatMessage:input.text fromUser:@"me" ofType:@"message"]; 
     NSLog(@"Broadcast Chat Room is: %@", chatRoom); 
     [chat appendTextAfterLinebreak:[NSString stringWithFormat:@"me: %@", input.text]]; 
     // clear input 
     [input setText:@""]; 
    } 
    return YES; 
} 

當我我們e斷點,變量聊天不工作時顯示0x00。

有沒有人有任何想法?

.H:

@interface FirstViewController : UIViewController <RoomDelegate>{ 

    IBOutlet UILabel* label; 

    IBOutlet UIBarButtonItem *bbiOpenPopOver; 

    UIPopoverController *popOverController; 
    ServerListController *serverListController; 
    Room* chatRoom; 
    IBOutlet UITextView* chat; 
    IBOutlet UITextField* input; 
    Room *newRoom; 


} 
@property (nonatomic, retain) UILabel *label; 

@property (nonatomic, retain) UIBarButtonItem *bbiOpenPopOver; 

@property (nonatomic, retain) UIPopoverController *popOverController; 

@property (nonatomic, retain) ServerListController *serverListController; 

@property(nonatomic,retain) Room* chatRoom; 

@property (nonatomic, retain) UITextView* chat; 

-(IBAction)togglePopOverController; 

@end 
+0

在任何時候聊天是否設置爲零?如何在頭文件中聲明聊天? –

+0

@ Paul.s我沒有看到任何聊天設置爲零的地方,但我會深入一點。有一個地方我這樣做:chat.text = @「」;看到我的上面的編輯頭文件。謝謝。 –

+0

對不起剛剛看到你的編輯。你是否有任何理由直接訪問伊娃,而不是通過獲得者/設定者?如果你使用getters/setter並且可以幫助避免這些問題,它使內存管理變得容易很多。 –

回答

0

我想我知道發生了什麼事情。

在你FirstViewController您聲明的內部變量(伊娃):

IBOutlet UITextView* chat; 

然後,此外,您在聲明屬性:

@property (nonatomic, retain) UITextView* chat; 

除非你指定,每一個Objective-C的財產是由一個自動合成的ivar支持的,其名稱是屬性名稱,前面帶有_前綴(本例中爲_chat)。

因此FirstViewController對於同一事物有兩個不同的ivars:chat_chat。我猜的工作方法使用chat,而那些失敗的使用_chatself.chat(內部訪問_chat)。那,或者相反。

我的建議是,你擺脫了所有的ivars,只使用屬性訪問器(self.propertyName)。這使得屬性可以直接和容易地與局部變量區分開來,並且可以得到更具可讀性和可維護性的代碼。

請注意,您可以在.h.m文件中聲明屬性。在.m文件中聲明的屬性只能從該文件中查看。我建議你在.m文件中聲明所有不需要的屬性。這可以保持ViewController的界面簡潔而乾淨。

我個人只有在需要重載或重寫屬性訪問器時才直接訪問ivars,或者如果這樣做會有效地提高性能(這不常見)。

相關問題