此应用程序的目的是检索在UITableCell
上选择的数据并将其传递给新的视图控制器。一切都很好,直到用户选择单元格。加载下一个视图控制器但屏幕为黑色。
在该屏幕上,我有UIImageView
和UILabel
。我在故事板中设置了UINavigationController
。我试图在第一个屏幕上选择图像和文本到下一个屏幕上的相应对象。我从数据库中检索了数据并将其加载到第一个屏幕。
以下是我的storedetail.h
上的代码,它是UIViewController
的子类,
@property (nonatomic, copy) UIImage *storeImage;
@property (nonatomic, copy) UILabel *storeCode;
这是我的代码,我在调用nextviewcontroller,ShowStores.m
是UITableView
的子类,
标题代码,
#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.text
和cell.imageView.image
不是nil或null。
第二个视图加载但是黑色。我在第二个视图上设置了一个后退按钮,它将用户带回到第一个视图,并且工作正常。
答案 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>