2011-12-03 46 views
6

Giả sử có mã cho một dự án iphone đó là:UITextfield.text trả về null

 IBOutlet UITextField* numberDisplay; 
     @property (strong,nonatomic) IBOutlet UITextField *numberDisplay; 

trong tập tin thực thi và

@synthesize numberDisplay;

trong tệp triển khai. Ngoài ra trong triển khai là

 -(IBAction)numberClicked:(id)sender { 
    UIButton *buttonPressed = (UIButton *)sender; 
    int val = buttonPressed.tag; 
    if ([numberDisplay.text compare:@"0"] == 0) { 
    numberDisplay.text =[NSString stringWithFormat:@"%d", val ]; 

    } else { 
     numberDisplay.text = [NSString 
        stringWithFormat:@"%@%d", numberDisplay.text, val ]; 
    } 

    } 

Khi tôi chạy ứng dụng không có hiển thị được hiển thị trong UITextfield, và được chứng minh bằng cách xem thanh tra. Ngay cả khi một thử nghiệm nếu tôi thêm các dòng

numberDisplay.text = @"a"; 
    NSLog(@"the value is %@",numberDisplay.text); 
    NSLog(@"the value is %@",numberDisplay); 

tôi nhận được "giá trị là (null) trong cả hai ý tưởng cases.Any.

Có thể ai đó xin vui lòng cho tôi biết những gì là sai với hai dòng sau? . Cảm ơn bạn.


Nhờ tất cả. tôi bắt đầu từ đầu và bây giờ tất cả các công trình. Hình như tôi đã có một tập tin bị nhầm.

+1

Thử in biến 'numberDisplay' thay vì thuộc tính' văn bản'. Tôi nghi ngờ rằng ở một nơi khác bạn chưa khởi tạo trường văn bản của bạn; vì bạn không thể gán một biến cho một đối tượng null, bạn nhận được null. – JoePasq

+0

cách bạn sẽ khởi tạo trường văn bản. Trong thanh tra thuộc tính tôi đã thử thiết lập văn bản và/hoặc giữ chỗ và cả hai để 0 để xem nếu điều đó sẽ giúp đỡ, nhưng nó không –

+1

Bạn phải liên kết UiTextView trong tập tin .xib của bạn với IBOutlet. –

Trả lời

1

Tiếp theo dòng wi sẽ trả về giá trị không null nếu bạn đã thiết lập IBOutlet thành Interface builder. Nó sẽ được khai báo trong tập tin .h.

IBOutlet UITextField* numberDisplay; 

Nếu bạn không đặt đầu ra cho IB, nó rõ ràng sẽ trả về giá trị null hoặc bạn phải khởi chạy nó theo cách lập trình.

UITextField *numberDisplay = [[UITextField alloc] initWithFrame:CGRectMake(10,10, 100,30)]; 
numberDisplay.font = [UIFont fontWithName:@"Verdana" size:12.0]; 
numberDisplay.background = [UIColor clearColor]; 
numberDisplay.text = @"123456789"; 
[self.view addSubview:numberDisplay]; 
NSLog(@"the value is %@",numberDisplay.text); // returns 123456789 
0

Có vẻ như bạn có thể không đặt đúng IBOutlets trong Trình tạo giao diện.

Kiểm tra câu trả lời của tôi cho this question, về cơ bản giống nhau.

2

Đối tượng rỗng có thể nhận bộ chọn và bỏ qua chúng và trả về đối tượng rỗng. trường hợp bạn gặp phải là như thế này:

[(UITextField*)nil setText:@"a"]; 
NSLog(@"the value is %@", [(UITextField*)nil text]); 

Hãy chắc chắn rằng các lĩnh vực văn bản không phải là null

+0

cách trường văn bản có thể rỗng nếu tôi đặt nó thành "a" –

+0

Tại sao bạn truyền 'nil '? – titaniumdecoy

+1

Để minh họa câu trả lời của mình rằng nil có thể trả lời bất kỳ thư nào có nil. –

0

bạn phải tổng hợp các textfield đúng theo những cách sau đây: - Thêm dòng trong .h

@property (nonatomic, retain) UITextField *numberDisplay; 

và thêm dòng trong .m

@synthesize numberDisplay; 

và sau đó làm những gì bạn đã làm. Bạn sẽ không nhận được giá trị null lần này.

+0

không tốt. vẫn còn trống. –

+0

kiểm tra xem kết nối của bạn trong IB có phù hợp hay không. – vipul

+0

Tôi đã kéo hộp văn bản trong tệp xib vào ổ cắm và nó đăng ký, vì trong trình kiểm tra kết nối nó hiển thị cửa sổ tham chiếu là chủ sở hữu tệp IBOUtlet mà tôi đã tạo . –