Хорошо, позвольте мне объяснить ситуацию, у меня есть два контроллера вида, назовем их первой и второй.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 невозможно установить текст метки.
ok Я не очень хорошо использую отладчик, но значение 0x0, я думаю, имеет значение null, выход, как я уже сказал в начале моего вопроса, установлен правильно, владельцем файла является DbTransfer. Я думаю, что проблема в том, как я создаю каждый класс DbTransfer. Я прочитал это [link] (http://stackoverflow.com/questions/2112588/problem-setting-value-for-uilabel-iphone-sdk), но, честно говоря, я не понял ответа. –
Вы правы: 0x0 означает null, означает, что UILabel не связан, поэтому обновление не работает. Таким образом, проблема определенно в том, что вы думаете: «aTransfer = [[DbTransfer alloc] initWithNibName: @« DbTransfer »bundle: nil];». Проверьте: xib-файл включен в цель, xib называется «DbTransfer.xib», aTrasnfer имеет tyoe DbTransfer, указатель и где-то сохраняется. – Hiltmon
Да, проблема в том, что я решил «решить» эту проблему, изменив точку, в которой были установлены текстовые атрибуты метки. В основном я пытался установить текст перед загрузкой представления, причем, очевидно, никакого эффекта на метку, поэтому теперь я устанавливаю текст на метке в методе viewDidLoad.Во всяком случае, даже если это изменение «частично» решило мою проблему, я думаю, что что-то не так происходит. –