iphone UIViewController不显示从第一个视图控制器传递的数据

时间:2012-02-09 10:43:24

标签: iphone objective-c uiviewcontroller

此应用程序的目的是检索在UITableCell上选择的数据并将其传递给新的视图控制器。一切都很好,直到用户选择单元格。加载下一个视图控制器但屏幕为黑色。 在该屏幕上,我有UIImageViewUILabel。我在故事板中设置了UINavigationController。我试图在第一个屏幕上选择图像和文本到下一个屏幕上的相应对象。我从数据库中检索了数据并将其加载到第一个屏幕。

以下是我的storedetail.h上的代码,它是UIViewController的子类,

@property (nonatomic, copy) UIImage *storeImage;
@property (nonatomic, copy) UILabel *storeCode;

这是我的代码,我在调用nextviewcontroller,ShowStores.mUITableView的子类,

标题代码,

#import "ShowStores.h"
#import "StoreDetail.h"

代码,我在用户选择单元格时加载下一个视图,

(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
[tableView deselectRowAtIndexPath:indexPath animated:NO];
StoreDetail *storedetail = [[StoreDetail alloc] init];
storedetail.storeImage = cell.imageView.image;
storedetail.storeCode = cell.textLabel;
storedetail.storeCode.text = cell.textLabel.text;
[self.navigationController pushViewController:storedetail animated:YES];
}

我已调试它,cell.textLabel.textcell.imageView.image不是nil或null。 第二个视图加载但是黑色。我在第二个视图上设置了一个后退按钮,它将用户带回到第一个视图,并且工作正常。

2 个答案:

答案 0 :(得分:0)

UIImage和UILabel不符合NSCopying协议,这很可能就是原因。因此声明@property(非原子,复制)并不会影响您的意图。

我的建议是为他们设置保留,并且在您想要复制的位置,只需初始化并将对象分配给他们。

答案 1 :(得分:0)

你有第二个视图控制器的笔尖是否有storeCode uiLabel? 或者您是否在viewDidLoad中以编程方式创建了storeCode UILabel?

我会删除这一行:

   storedetail.storeCode = cell.textLabel;

在这一行:

   storedetail.storeImage = cell.imageView.image;
当我认为你希望它成为UIImageView时,

storeImage是一个UIImage。 (我也会删除那一行并创建storeImageView,就像创建storeCode uiLabel一样 - 在你的nib中使用它或者在viewDidLoad中以编程方式创建它。

编辑:

在viewDidLoad中创建对象,如下所示:

storeCode = [[UILabel alloc] initWithFrame:CGRectMake(10, 20, 120, 16)];
[self addSubview:storeCode];

对于图像,我将图像的名称(文件名或路径)设置为第二个视图控制器上的NSString属性,然后在viewWillAppear中使用该字符串创建正确的UIImage,然后将该UIImage分配给您的UIImageView。 / p>