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

问题描述:

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

这是我在我的storedetail.h代码是一个子类的UIViewController

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

这里是我的代码,其中我打电话的nextviewcontroller这是ShowStores.m这是UITableView的一个子类,

标题代码,

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

代码当用户选择第其中i加载下一个视图Ë细胞,

(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不为零或为空。 第二个视图加载但是是黑色的。我在第二个视图上设置了一个后退按钮,它将用户带回第一个视图,并且工作正常。

+0

在您的StoreDetail你使用的是什么界面? – 2012-02-09 10:49:30

+0

我已经综合了相应的属性。我的假设是,因为我已经实例化了我不需要'接口'的属性。 viewDidLoad()中的NSLog(@“StoreDetail%@”,self.storeCode.text)显示传入的是第一个表单的值。我猜诀窍在于将它连接到UILable和UIIMage – 2012-02-09 11:03:23

+0

而不是UIImage或UILabel使用NSString从商店页面获取数据。然后在详细信息页面上使用相应的NSString将标签和图像上的数据传递。 – NoviceDeveloper 2012-02-09 11:08:27

UIImage和UILabel不符合NSCopying协议,这很可能是原因。所以声明@property(nonatomic,copy)不会影响你的意图。

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

+0

如果我可以调用它,就是在这行代码中:StoreDetail * storedetail = [[StoreDetail alloc] init];这实例化了一个全新的类,废除了我在这个视图控制器的故事板上所做的设计,现在我已经改变为一个tableviewcontroller,但有一个UIIMageView和一个单元格。它确实显示了图像和从第一个视图控制器传递过来的值,但是设计被重写也是合理的。有没有办法做到这一点,而不会失去我的设计? – 2012-02-09 19:03:57

你有第二个视图控制器与storeCode uiLabel在一个笔尖吗? 或者你在viewDidLoad中以编程方式创建storeCode UILabel?

我会删除此行:这一行

storedetail.storeCode = cell.textLabel; 

storedetail.storeImage = cell.imageView.image; 

storeImage是一个UIImage当我想你希望它是一个UIImageView。 (我会删除该行也创造了storeImageView以同样的方式为您塑造商店代码的UILabel - 要么有它在你的笔尖或viewDidLoad中编程创建

编辑:

在viewDidLoad中创建对象的。如下:

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

对于我的图像(文件名或路径)的名称设置为一个NSString财产你的第二个视图控制器上,然后在viewWillAppear中使用字符串创建正确的UIImage,然后分配该图像UIImage到你的UIImageView。

+0

你说的代码是我试图设置两个对象的值。我没有一个nib文件,并希望以编程方式执行此操作。我没有代码在viewDidLoad中设置,因为我的假设是视图会在设计时使用在运行时获取的值设置的对象加载。 – 2012-02-09 11:57:05

+0

这个问题似乎与StoreDetail * storedetail = [[StoreDetail alloc] init];在那里商店的细节被启动到一个新的实例,因此覆盖了我的设计。在我的didSelectRowAtIndexPath方法中以编程方式建立一个新的UIViewcontroller,它可以设置颜色等,因此问题似乎与商店细节类以及启动方式有关。我不想以编程方式设置我的视图,因为我已经在故事板上完成了设计。如果一个nib文件是唯一的解决方法,请指导我如何在Xcode 4.2中创建一个文件。非常感激。 – 2012-02-09 13:08:02