Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 目标C:UILabel“;";在我看来_Objective C_Ios - Fatal编程技术网

Objective c 目标C:UILabel“;";在我看来

Objective c 目标C:UILabel“;";在我看来,objective-c,ios,Objective C,Ios,我正在开发一个选项卡式应用程序,它(除其他外)创建了一个简单的Facebook提要。Facebook部分是一个UINavigationController,包含一个主表视图和一个详细视图。当我单击主表视图中的一行时,它会按预期显示详细视图(以及适当填充的标签)。但是,如果返回主视图并选择另一行,则会发生一些奇怪的情况。如果“detailLab”标签(即sizeToFit'd)在详图视图的第一次出现时长四行,而“detailLab”标签在详图视图的第二次出现时长两行,则在详图视图的第二次出现时,“

我正在开发一个选项卡式应用程序,它(除其他外)创建了一个简单的Facebook提要。Facebook部分是一个
UINavigationController
,包含一个主表视图和一个详细视图。当我单击主表视图中的一行时,它会按预期显示详细视图(以及适当填充的标签)。但是,如果返回主视图并选择另一行,则会发生一些奇怪的情况。如果“detailLab”标签(即
sizeToFit
'd)在详图视图的第一次出现时长四行,而“detailLab”标签在详图视图的第二次出现时长两行,则在详图视图的第二次出现时,“detailLab”将正确显示前两行,但在它们下面是详图视图第一次出现时的最后两行

以及一些(希望如此)相关代码:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    CGRect labelFrame = CGRectMake(100, 40, 220, 150);
    detailLab = [[UILabel alloc] initWithFrame:labelFrame];
    [detailLab setTextColor:[UIColor darkGrayColor]];
    detailLab.font = [UIFont systemFontOfSize:14];

    [detailLab setText:detail];
    [detailLab setNumberOfLines:0];
    [detailLab sizeToFit];

    [self.view addSubview:detailLab];

    NSURL *url = [NSURL URLWithString:pictureString];
    NSData *imageData = [[NSData alloc] initWithContentsOfURL:url];
    picture = [UIImage imageWithData:imageData];
    bigImage.image = picture;
    NSLog(@"dateString: %@", dateString);
    dateLabel.text = dateString;
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    bigImage = nil;
    detailLab = nil;
    detailLab.hidden = YES;
    // Release any retained subviews of the main view.
    self.detailDescriptionLabel = nil;
}

如果您需要任何其他代码或详细信息,请询问;我很乐意提供。

问题是,每次调用
视图时,您都会创建一个新标签,我想,在
视图中删除它将消失。所以标签是叠起来的,一个在另一个上面

请记住,您可能会收到这样的呼叫(忽略不相关的呼叫):


从主视图到详细视图,这是正常的-令人沮丧,但很正常。当我遇到问题时,我找到的解决方案是在每个-viewdiload的顶部重置标签

一个选项是在viewDidUnload中删除它。另一种方法是每次重置标签,使用一段代码,如下面的代码,位于代码实际加载到内容的部分上方

detailLab=[NSString stringWithFormat:@''

问题在于,设置大多数主视图/局部视图时,实际上并不是每次添加视图时都创建新的局部视图,而是在“主视图”区域中创建指向同一视图的另一个链接。这很好,但您只需要记住使用ViewDidLoad


希望它有帮助

我没有意识到我必须在
视图中删除它,它将消失
。我认为在
viewDidUnload
中将标签设置为nil会起到类似的作用。无论如何,谢谢你的帮助!我会尽快接受这个答案(大约三分钟后)。我编辑了我的答案,让它更清楚(我希望!)为什么会发生这种情况。(看看电话的顺序)啊,我现在肯定更清楚了。我真的很感谢你添加的细节,它们让我们更容易理解。
viewDidLoad

viewWillAppear
viewWillDisappear

viewWillAppear        <- Whoops! Two labels
viweWillDisappear

viewDidUnload
- (void)viewDidLoad
{
    [super viewDidLoad];
    detailLab = [[UILabel alloc] initWithFrame:CGRectZero];
    [detailLab setTextColor:[UIColor darkGrayColor]];
    detailLab.font = [UIFont systemFontOfSize:14];
    [self.view addSubview:detailLab];
}

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    CGRect labelFrame = CGRectMake(100, 40, 220, 150);
    [detailLab setFrame:labelFrame];
    [detailLab setText:detail];
    [detailLab setNumberOfLines:0];
    [detailLab sizeToFit];

    NSURL *url = [NSURL URLWithString:pictureString];
    NSData *imageData = [[NSData alloc] initWithContentsOfURL:url];
    picture = [UIImage imageWithData:imageData];
    bigImage.image = picture;
    NSLog(@"dateString: %@", dateString);
    dateLabel.text = dateString;
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    bigImage = nil;
    detailLab = nil;
    detailLab.hidden = YES;
    // Release any retained subviews of the main view.
    self.detailDescriptionLabel = nil;
}