[英]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.