2011-04-04 22 views
9

Takılıyorum :(
Uygulamamda CLLocationManager'dan yeni bir konum güncellemesi geldiğinde her zaman bir güncellemeye ihtiyacım var XIB/NIB dosyalarını kullanmıyorum, kodladığım her şeyi programlı olarak yaptım. :?
.h Xibili UILabel, XIB dosyaları olmadan programlı olarak nasıl güncellenir?

.m


... 

-(void)loadView{ 
    .... 
    UILabel* theLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0,0.0,320.0,20.0)]; 
    theLabel.text = @"this is some text"; 

    [self.view addSubView:theLabel]; 
    [theLabel release]; // even if this gets moved to the dealloc method, it changes nothing... 
} 

- (void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation 
      fromLocation:(CLLocation *)oldLocation 
{ 
    NSLog(@"Location: %@", [newLocation description]); 

    // THIS DOES NOTHING TO CHANGE TEXT FOR ME... HELP?? 
    [self.view.theLabel setText:[NSString stringWithFormat: @"Your Location is: %@", [newLocation description]]]; 

    // THIS DOES NOTHING EITHER ?!?!?!? 
    self.view.theLabel.text = [NSString stringWithFormat: @"Your Location is: %@", [newLocation description]]; 

} 
... 

Herhangi bir fikir veya yardım

(bu tüm el


@interface TestViewController : UIViewController 
    UILabel* theLabel; 

@property (nonatomic, copy) UILabel* theLabel; 

@end 
sıkışmış öyleyse eğer biraz gafseli görünüyorsa lütfen beni affet.) Gerekirse daha fazla bilgi sağlayabilirim.

+0

NSLog doğru konumu gösteriyor mu? – GorillaPatch

+0

Bunu mu demek istediniz: viewDidLoad? –

+0

@Radek Yükleyiciye koydum, UILabel viewDidLoad'a konmalı mı? Bu geçersiz kılma noktası mı? Ve neden bir kullanıcı arabirimi programsal olarak oluşturmak için UILabel mutable –

cevap

16

LoadView yönteminiz yanlış. Örnek değişkenini doğru şekilde ayarlamazsınız, ancak bunun yerine yeni bir yerel değişken oluşturursunuz. UILabel * ve 'u atlayarak, metni daha sonra ayarlamak için etiketin etrafında bir referans tutmak istediğiniz için onu yayınlamayın.

-(void)loadView{ 
    .... 
    theLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.0,0.0,320.0,20.0)]; 
    theLabel.text = @"this is some text"; 

    [self.view addSubView:theLabel]; 
} 

- (void) dealloc { 
    [theLabel release]; 
    [super dealloc]; 
} 

Sonra sonra doğrudan böyle değişkeni erişmek:

- (void)locationManager:(CLLocationManager *)manager 
    didUpdateToLocation:(CLLocation *)newLocation 
      fromLocation:(CLLocation *)oldLocation 
{ 
    NSLog(@"Location: %@", [newLocation description]); 

    theLabel.text = [NSString stringWithFormat: @"Your Location is: %@", [newLocation description]]; 

} 
+0

Yine de orijinal metni "bu bir metin" olarak anladım, hiç bir zaman güncellemeye devam etmese de yeni bir konumla basılmış konsoldaki NSLog çıkışını görebiliyorum. –

+0

Cevabı güncelledim. Konum yöneticisi temsilci geri çağrısında başvuruda bulunduğunuzLabel örnek değişkeninin, doğru bir şekilde atamanız gerektiğinden hala geçersiz olduğunu düşünüyorum. – GorillaPatch

+0

haklısınız, bir yerel var olması gerekiyordu ... Yukarıdaki kodu değiştirebilir ve [theLabel release] 'i yorumla birlikte kaldırabilirsiniz, çünkü bu çok erken (yani cevapta bir yazım hatası) açığa çıkarır. –

0

Eğer .m dosyasında theLabel sentezleme ki ...? Eğer değilse, buna ihtiyacın var.

+0

Derleyici, ayarlayıcı ve ayarlayıcı uygulanmadığı ve @synthesize verilmediyse bir uyarı verecektir. – GorillaPatch

+0

OP'in göz ardı etmeyi başarmış olması muhtemel ... –