在标签上设置文本时出现iOS 6问题

时间:2013-04-13 12:21:50

标签: iphone ios objective-c uilabel

我有一些标签问题。我创建了一个公共方法,从表视图中获取信息,并在3标签,文本视图中显示此信息,并从Web加载图片。我在表视图didSelectRowAtIndexPath方法中设置了所有变量,但是我有一些问题要显示该信息。我这样做了: 在表视图控制器中我调用了另一种方法:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    self.detailCharacterViewController = [[DetailCharacterViewController alloc] init];
    [self.detailCharacterViewController setupDetailViewControllerWithName:[self.arrayCharacters[indexPath.row] objectForKey:@"name"] andSurname:[self.arrayCharacters[indexPath.row] objectForKey:@"surname"] andKind:[self.arrayCharacters[indexPath.row] objectForKey:@"kind"] andDescription:[self.arrayCharacters[indexPath.row] objectForKey:@"description"] andImage:[self.arrayCharacters[indexPath.row] objectForKey:@"URLpic"]];
}

我实现了这个方法:

    - (void)setupDetailViewControllerWithName:(NSString*)name andSurname:(NSString *)surname andKind:(NSString*) kind andDescription:(NSString*)description andImage:(NSString*)url {
    NSLog(@"name = %@", name);
    self.labelName.text = name;
    self.labelSurname.text = surname;
    self.labelKind.text = kind;
    self.textDescription.text = description;

    NSURL *urlPic = [NSURL URLWithString:url];
    NSData *dataPic = [NSData dataWithContentsOfURL:urlPic];
    [self.imagePic setImage:[UIImage imageWithData:dataPic]];
}

如果我查看日志,我会看到正确的事情,但如果我在iPhone或iPhone模拟器上查看GUI,它将保持空白。这段代码有什么问题? 谢谢你的建议。

@Alex Blundell

#import <UIKit/UIKit.h>



@interface DetailCharacterViewController : UIViewController
@property (weak, nonatomic) IBOutlet UILabel *labelName;
@property (weak, nonatomic) IBOutlet UILabel *labelSurname;
@property (weak, nonatomic) IBOutlet UILabel *labelKind;
@property (weak, nonatomic) IBOutlet UIImageView *imagePic;
@property (weak, nonatomic) IBOutlet UITextView *textDescription;

- (void)setupDetailViewControllerWithName:(NSString*)name andSurname:(NSString *)surname andKind:(NSString*) kind andDescription:(NSString*)description andImage:(NSString*)url;

@end

3 个答案:

答案 0 :(得分:2)

问题在于,当您拨打DetailCharacterViewController时,您的setupDetailViewControllerWithName:...视图尚未加载,因此没有任何插座已连接(尚未)。通过alloc-init实例化视图控制器自动加载其视图。

您可以通过在设置方法开头调用[self view]来强制加载视图。这是有效的,因为访问view属性会自动加载视图(如果之前未加载)。

或者,您可以制作视图控制器的namesurnameNSString属性,并在viewDidLoad中设置相应的标签。

答案 1 :(得分:1)

您是否正在使用Interface Builder / Storyboard来设计界面?您是否确保为每个UITextField / View连接IBOutlets?

您应该在视图控制器类的头文件中标识对象,并确保它们以IBOutlet为前缀,以便它们出现在Interface Builders连接窗格中。 E.g。

IBOutlet UITextField labelName;
[...]

然后,您需要转到IB并转到视图控制器的连接窗格以连接每个文本字段/视图。

答案 2 :(得分:0)

这个问题也发生在我身上。

这与iOS实际上非常最终连接你的网点这一事实有关。

如果在setupDetailViewControllerWithName:中放置一个断点并检查您的IBOutlet变量,它们将为零。这就是你看到空白视图的原因。 (好的老nil错误)

我将要解决的问题是在DetailCharacterViewController类中声明属性。 (例如@property (copy, nonatomic) NSString* name)。

在您致电setupDetailViewControllerWithName:的地方,请设置这些属性,例如:

self.detailCharacterViewController.name = name;

最后在DetailCharacterViewController的{​​{1}}中,您可以使用保存的属性设置标签的值。 (那些商店肯定会被连接起来)。

(顺便说一下,viewDidLoad:也存在这个问题。目标视图控制器的出口在prepareForSegue:中仍然是零。所以你不能直接在那里设置它们。