簡體   English   中英

在Xcode 4.2問題中設置IBOutlet屬性

[英]Setting IBOutlet property in Xcode 4.2 issue

我正在使用基於導航的iPhone應用程序,我在內部視圖中定義了一個IBOutlet屬性並將其合成,

問題是當我想在推送新視圖控制器之前設置IBOutlet值時,將不會設置該值。 以下是代碼中的代碼段:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{

    MealDetailViewController *mealViewController = [[MealDetailViewController alloc] initWithNibName:@"MealDetailViewController" bundle:nil];

    MealsModel *model = (MealsModel *)[_items objectAtIndex:indexPath.row];

    NSLog(model.Name);// here it writes the name right as a string

    //mealViewController.lblName.text=model.Name;

    [[mealViewController lblName]setText:model.Name];
    [[mealViewController txtDesc]setText:model.Description];

    [self.navigationController pushViewController:mealViewController animated:YES];

    [mealViewController release];
}

我在之前的Xcode版本中沒有遇到過這些問題。

這與視圖控制器的視圖創建時有關。

當你這樣做

[[mealViewController lblName] setText:model.Name];

你還沒有加載它的視圖所以lblName將是nil

試試

(a)明確要求視圖,觸發要創建的子視圖:

[mealViewcontroller view];
[[mealViewController lblName]setText:model.Name];
[[mealViewController txtDesc]setText:model.Description];

要么

(b)讓導航控制器為您創建視圖

[self.navigationController pushViewController:mealViewController animated:YES];

[[mealViewController lblName]setText:model.Name];
[[mealViewController txtDesc]setText:model.Description];

要么

(c)將值存儲在mealViewController中作為屬性

MealViewController.h

@property (nonatomic, copy) NSString *lblNameString;
@property (nonatomic, copy) NSString *txtDescString;

MealViewcontroller.m

@synthesize txtDescString, lblNameString;

而不是直接設置標簽,而是設置屬性。

[mealViewController setLblNameString:model.Name];
[mealViewController setTxtDescString:model.Description];

然后,在newWillAppear中設置它們

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    lblName.text = lblNameString;
    txtDesc.text = txtDescString;
}

(c)更正確的方法 - (a)和(b)如果視圖控制器的視圖被低內存警告卸載,則兩者都會失敗。

我要做的是將* Meal對象傳遞給MealDetailViewController。 然后使用它在MealDetailViewController中設置標簽等。 一旦我有類似的問題,發現我正在初始化屬性,我的接收類的ViewDidLoad中的UILabel,所以它覆蓋任何傳入的文本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM