2012-02-29 53 views
1

我有一個小片的代碼,設置的NSString類用戶名到的值被輸入到一個的UITextField和(strUserName中),則按鈕。這工作得很好: UsernameViewController.m的NSString被設置但顯示爲空從另一個類調用時 - 的iOS

#import <UIKit/UIKit.h> 
    #import "Username.h" 

    @interface UsernameViewController : UIViewController 
    { 
     Username *username; 
     __weak IBOutlet UITextField *test; 
    } 

    @property (nonatomic, retain)IBOutlet UITextField *txtUsername; 
    @property (nonatomic, retain) IBOutlet UITextField *test; 

    -(IBAction)setUsername; 

    @end 

#import "UsernameViewController.h" 
#import "Username.h" 

@implementation UsernameViewController 

@synthesize test=_test;  
    - (void)viewDidLoad 
     { 
      [super viewDidLoad]; 
      username = [[Username alloc] init]; 
     } 

     -(IBAction)setUsername 
     { 
      NSString *inputUsername = self.test.text; 
      NSLog(@"inputUsername is: %@", inputUsername); 

      username.strUsername = inputUsername; 
      NSLog(@"the username.strUsername is now: %@", username.strUsername); 
     } 

我的NSLog輸出顯示的UITextField輸入和NSString的制定者正在努力:

LocNews1[6699:707] inputUsername is: Harry brown 
LocNews1[6699:707] the username.strUsername is now: Harry brown 

現在,當它擊中這個視圖返回的返回按鈕我回到了UITableViewController。然後我執行下拉刷新動作和其所謂的以下方法:

TestViewController.m(的UITableViewController型)

#import "TestViewController.h" 
#import "ViewController.h" 
#import "DetailViewController.h" 
#import "AppDelegate.h" 
#import "NewsArticle.h" 
#import "ResultsCustomCell.h" 
#import "XMLParser.h" 

@implementation TestViewController 

//some code 

- (void)addItem 
{ 
    username = [[Username alloc] init]; 

    // Use XMLparser to check for updated new feeds. 
    if(username.strUsername != NULL) 
    { 
     NSLog(@"ViewController username.strUsername is:%@",username.strUsername); 
     activeUsername = username.strUsername; 
    } 
    else 
    { 
     NSLog(@"%@",username.strUsername); 
     activeUsername = @""; 
    } 

    NSString *myLat = [[NSString alloc] initWithFormat:@"%f", locationManager.location.coordinate.latitude]; 
    NSString *mylong = [[NSString alloc] initWithFormat:@"%f", locationManager.location.coordinate.longitude]; 
    XMLParser *parseQuestionnaire = [[XMLParser alloc] init]; 
    NSLog(@"username %@",activeUsername); 
    newsArticle = [parseQuestionnaire parseXML:myLat:mylong:activeUsername]; 

    [self.tableView reloadData]; 

    [self stopLoading]; 
} 

然而,這示出了的NSLog輸出爲:

LocNews1[6699:707] ViewController username.strUsername is: 

正如你可以看到在UsernameViewController.m中設置了字符串,但是當我嘗試在TestViewController.m中調用字符串時,它顯示爲空白(NSLog中沒有空值,只是空白)。

這可能是什麼原因造成的?

編輯:Username.h /米

#import <Foundation/Foundation.h> 

@interface Username : NSObject 
{ 
    NSString *strUsername; 
} 

@property (nonatomic, retain) NSString *strUsername; 

@end 

#import "Username.h" 

@implementation Username 

@synthesize strUsername; 

-(id)init 
{ 
    strUsername = [[NSString alloc] init]; 
    return self; 
} 

@end 

注意:用戶名在兩個TestViewController.h和UsernameViewController.h等宣稱:用戶名*用戶名;

+0

「username」聲明在哪裏?它是一個實例變量?全局變量? – Chuck 2012-02-29 23:35:50

+0

代碼已更新,以顯示用戶名類和它的聲明 – HGomez90 2012-02-29 23:44:40

回答

1

該實例的UsernameViewController中的username實例變量與TestViewController實例中的username實例變量完全無關。您需要將變量存儲在兩個控制器都知道的地方,或者如果您希望它們都可以訪問,則需要將它們傳遞給它們。只要有兩個同名的變量不以任何方式連接它們。

+0

我已經嘗試使用'TestViewController * testViewController = [[TestViewController alloc] init]將UsernameViewController的值傳遞給父視圖控制器(TestViewController); //self.test.text = [(testViewController *)self.navigationController.presentingViewController] .text; testViewController.activeUsername = test.text;'在​​IBAction方法中。 但是,當使用UINavController中的後退按鈕返回到TestViewController時,字符串'activeUsername'爲空。我究竟做錯了什麼? – HGomez90 2012-03-01 01:25:26

+1

您在那裏創建的TestViewController與實際控制視圖的不一樣。就像不同的NSString實例持有不同的文本一樣,TestViewController的每個實例都是它自己的對象,並帶有自己的變量。 – Chuck 2012-03-01 01:46:15

相關問題