Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 未在详细信息视图中加载数据_Ios_Iphone_Uitableview_Plist_Detailsview - Fatal编程技术网

Ios 未在详细信息视图中加载数据

Ios 未在详细信息视图中加载数据,ios,iphone,uitableview,plist,detailsview,Ios,Iphone,Uitableview,Plist,Detailsview,我正在尝试将数据加载到“详细信息”视图中。有人能看一看为什么它没有显示出来吗?它在我的rootviewcontroller中加载良好,而不是在细节视图中 DetailViewController.m #import "DetailViewController.h" @implementation DetailViewController - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; //

我正在尝试将数据加载到“详细信息”视图中。有人能看一看为什么它没有显示出来吗?它在我的rootviewcontroller中加载良好,而不是在细节视图中

DetailViewController.m

 #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后面有一个点?啊,这是另一个用户建议的一行代码。当它像那样被键入时,调试器会将其作为错误进行提取。如果我删除它,所有内容都会正常加载,尽管数据也不会传递到子视图。你还需要帮助吗?是的,那太好了。