iOS – 无法设置UILabel的文本

好,让我解释一下情况,我有两个视图控制器让我们先打电话给他们。

  • FirstViewController从UITableViewControllerinheritance
  • SecondViewControllerinheritance自UIViewController

SecondViewController的接口由Interface Builder构成,只包含一个标签和一个UIProgressView。 标签和UIProgressViewsockets都与正确的文件所有者(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]; } 

那些是tableView的dataSource方法

 - (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]]; //self.fileNameLabel.text=@"test"; NSLog(@"%@",fileNameLabel.text); restClient = [[DBRestClient alloc] initWithSession:[DBSession sharedSession]]; restClient.delegate=self; [restClient loadFile:srcPath intoPath:dstPath]; } 

你可以在startTransfer里面看到,我检查fileNameLabel是否为null,而且我不明白为什么。 也许空值与iVar aTransfer的分配有关。 顺便说一句,不可能设置标签的文字。

问题出在初始化,我在视图加载之前设置标签。 初始化viewDidLoad中的标签解决了这个问题。

埃利奥

简单testing – 在您设置self.fileNameLabel.text的行处设置断点。 当应用程序停在那里时,使用debugging器来查看指针是否为空。

最有可能的原因: – sockets没有正确链接 – 文件所有者不是正确的类,请确保将其设置为您的DbTransfer类

H