2011-02-19 3 views
13

Хорошо, позвольте мне объяснить ситуацию, у меня есть два контроллера вида, назовем их первой и второй.iOS - Невозможно установить текст UILabel

  • FirstViewController наследуют от UITableViewController
  • SecondViewController наследует от UIViewController

Интерфейс для SecondViewController выполнен с Interface Builder и содержит только метку и UIProgressView. как этикетка, так и выход UIProgressView соединены с владельцем правильных файлов (SecondViewController).

немного кода, в FirstViewController:

следующий метод вызывается посредством уведомления

- (void) addTransfer:(NSNotification *)notification{ 

     NSLog(@"notification received"); 
     NSDictionary *transferInfo = [notification userInfo]; 
     // I think the problem is here 
     aTransfer = [[DbTransfer alloc] initWithNibName:@"DbTransfer" bundle:nil]; 
     // 
     aTransfer.srcPath = [transferInfo objectForKey:@"srcPath"]; 
     aTransfer.dstPath = [transferInfo objectForKey:@"dstPath"]; 
     [aTransfer startTransfer]; 
     [transfer addObject:aTransfer]; 
     [self.tableView reloadData]; 

} 

те методы Datasource Tableview

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { 
// Return the number of sections. 
    return 1; 
} 


- (NSInteger)tableView:(UITableView *)tableView 
             numberOfRowsInSection:(NSInteger)section 
{ 
    NSLog(@"%d numberOfRowsInSection",[transfer count]); 
    return [transfer count]; 
} 


- (UITableViewCell *)tableView:(UITableView *)tableView 
           cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

static NSString *CellIdentifier = @"Cell"; 
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
            reuseIdentifier:CellIdentifier] autorelease]; 
} 

[cell.contentView addSubview:[[transfer objectAtIndex:indexPath.row] view]]; 
return cell; 

} 

это код SecondViewController.h

@interface DbTransfer : UIViewController <DBRestClientDelegate> { 

IBOutlet UILabel *fileNameLabel; 
IBOutlet UIProgressView *transferProgress; 

NSString *srcPath; 
NSString *dstPath; 

DBRestClient *restClient; 


} 

@property (nonatomic,retain) IBOutlet UILabel *fileNameLabel; 
@property (nonatomic,retain) IBOutlet UIProgressView *transferProgress; 
@property (nonatomic,retain) NSString *srcPath; 
@property (nonatomic,retain) NSString *dstPath; 

- (void) startTransfer; 

@end 

это метод внутри SecondViewcontroller.m

- (void) startTransfer{ 
//NSLog(@"%@\n%@",srcPath,dstPath); 

if (!fileNameLabel) { 
    NSLog(@"null"); 
} 
[self.fileNameLabel setText:[srcPath lastPathComponent]]; 
//[email protected]"test"; 


NSLog(@"%@",fileNameLabel.text); 


restClient = [[DBRestClient alloc] initWithSession:[DBSession sharedSession]]; 
restClient.delegate=self; 

[restClient loadFile:srcPath intoPath:dstPath]; 

} 

, как вы можете видеть в startTransfer проверить, если fileNameLabel является недействительным, и это, и я не понимаю, почему. Возможно, нулевое значение связано с распределением iVar aTransfer. btw невозможно установить текст метки.

ответ

26

Проблема была в инициализация, я устанавливал метку перед загрузкой представления. Инициализация метки в viewDidLoad решила проблему.

2

Элио

Простой тест - установить контрольную точку на линии, где вы установили self.fileNameLabel.text. Когда приложение останавливается там, используйте отладчик, чтобы увидеть, является ли указатель нулевым.

Наиболее вероятные причины: - Выпускной не связан правильно - владелец файла не правильного класса, убедитесь, чтобы установить его в класс DbTransfer

H

+0

ok Я не очень хорошо использую отладчик, но значение 0x0, я думаю, имеет значение null, выход, как я уже сказал в начале моего вопроса, установлен правильно, владельцем файла является DbTransfer. Я думаю, что проблема в том, как я создаю каждый класс DbTransfer. Я прочитал это [link] (http://stackoverflow.com/questions/2112588/problem-setting-value-for-uilabel-iphone-sdk), но, честно говоря, я не понял ответа. –

+0

Вы правы: 0x0 означает null, означает, что UILabel не связан, поэтому обновление не работает. Таким образом, проблема определенно в том, что вы думаете: «aTransfer = [[DbTransfer alloc] initWithNibName: @« DbTransfer »bundle: nil];». Проверьте: xib-файл включен в цель, xib называется «DbTransfer.xib», aTrasnfer имеет tyoe DbTransfer, указатель и где-то сохраняется. – Hiltmon

+0

Да, проблема в том, что я решил «решить» эту проблему, изменив точку, в которой были установлены текстовые атрибуты метки. В основном я пытался установить текст перед загрузкой представления, причем, очевидно, никакого эффекта на метку, поэтому теперь я устанавливаю текст на метке в методе viewDidLoad.Во всяком случае, даже если это изменение «частично» решило мою проблему, я думаю, что что-то не так происходит. –

Смежные вопросы