Ios 未在详细信息视图中加载数据
我正在尝试将数据加载到“详细信息”视图中。有人能看一看为什么它没有显示出来吗?它在我的rootviewcontroller中加载良好,而不是在细节视图中 DetailViewController.mIos 未在详细信息视图中加载数据,ios,iphone,uitableview,plist,detailsview,Ios,Iphone,Uitableview,Plist,Detailsview,我正在尝试将数据加载到“详细信息”视图中。有人能看一看为什么它没有显示出来吗?它在我的rootviewcontroller中加载良好,而不是在细节视图中 DetailViewController.m #import "DetailViewController.h" @implementation DetailViewController - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; //
#import "DetailViewController.h"
@implementation DetailViewController
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning]; // Releases the view if it doesn't have a superview
// Release anything that's not essential, such as cached data
}
- (void)setIcon:(UIImage *)newIcon
{
[super setIcon:newIcon];
iconView.image = newIcon;
}
- (void)setPublisher:(NSString *)newPublisher
{
[super setPublisher:newPublisher];
publisherLabel.text = newPublisher;
}
- (void)setName:(NSString *)newName
{
[super setName:newName];
nameLabel.text = newName;
}
- (void)dealloc
{
[iconView release];
[publisherLabel release];
[nameLabel release];
[priceLabel release];
[super dealloc];
}
@end
detailviewcontroller.h
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
@interface DetailViewController : UIViewController {
IBOutlet UIImageView *iconView;
IBOutlet UILabel *publisherLabel;
IBOutlet UILabel *nameLabel;
IBOutlet UILabel *priceLabel;
}
@end
这困扰了我很长一段时间,我看了很多例子、教程,甚至询问了其他iphone开发者。所有来源似乎都在说些不同的话 第一个问题是,DetailViewController中的setXXX方法尝试调用super setXXX,但由于DetailViewController是UIViewController的子类,因此对super的调用将失败,因为UIViewController没有此类方法。删除setXXX方法中对super的调用 第二个问题是setXXX方法直接在DetailViewController上设置控件,但在加载视图之前无法访问这些控件,因此如果在调用pushViewController之前调用这些方法,则无法工作 如果按如下方式更改DidSelectRowatineXpath中的代码,则应该可以正常工作:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailView" bundle:nil];
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController setName:@"name here"];
[detailViewController setPublisher:@"publisher here"];
[detailViewController setIcon:yourImageVariableHere];
[detailViewController release];
}
尽管上述更改应该有效,但您可能需要考虑创建IVARS来保存Debug视图控制器中的值(而不是使用UI控件本身来保存数据)。然后使用@property和@synthesis为它们创建属性。属性可以在创建DetailViewController后立即设置,并且在视图的viewDidLoad中,可以将ui控件设置为属性值。这将使DetailViewController能够更好地控制其ui的更新方式,允许您在不影响调用方的情况下更改ui,而且不需要显示它来设置其属性。
第一个问题是DetailViewController中的setXXX方法尝试调用super setXXX,但由于DetailViewController是UIViewController的子类,因此对super的调用将失败,因为UIViewController没有此类方法。删除setXXX方法中对super的调用 第二个问题是setXXX方法直接在DetailViewController上设置控件,但在加载视图之前无法访问这些控件,因此如果在调用pushViewController之前调用这些方法,则无法工作 如果按如下方式更改DidSelectRowatineXpath中的代码,则应该可以正常工作:- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailView" bundle:nil];
[self.navigationController pushViewController:detailViewController animated:YES];
[detailViewController setName:@"name here"];
[detailViewController setPublisher:@"publisher here"];
[detailViewController setIcon:yourImageVariableHere];
[detailViewController release];
}
尽管上述更改应该有效,但您可能需要考虑创建IVARS来保存Debug视图控制器中的值(而不是使用UI控件本身来保存数据)。然后使用@property和@synthesis为它们创建属性。属性可以在创建DetailViewController后立即设置,并且在视图的viewDidLoad中,可以将ui控件设置为属性值。这将使DetailViewController能够更好地控制其ui的更新方式,允许您在不影响呼叫者的情况下更改ui,并且不需要显示它来设置其属性。
将iPhone添加为标记。那么您将得到更多答案。DIDSelectRowatineDexpath中的“detailViewController.=[data objectAtIndex:indexPath.row];”行应该做什么?这是你问题中的实际代码还是打字错误?为什么detailViewController后面有一个点?啊,这是另一个用户建议的一行代码。当它像那样被键入时,调试器会将其作为错误进行提取。如果我删除它,所有内容都会正常加载,尽管数据也不会传递到子视图。你还需要帮助吗?是的,那太好了。添加iPhone作为标记。那么您将得到更多答案。DIDSelectRowatineDexpath中的“detailViewController.=[data objectAtIndex:indexPath.row];”行应该做什么?这是你问题中的实际代码还是打字错误?为什么detailViewController后面有一个点?啊,这是另一个用户建议的一行代码。当它像那样被键入时,调试器会将其作为错误进行提取。如果我删除它,所有内容都会正常加载,尽管数据也不会传递到子视图。你还需要帮助吗?是的,那太好了。