我目前正在处理的应用程序有点问题。我创建了一个最简单的项目来说明我的问题。
所以,我创建了一个“Navigate-Base应用程序”。我添加了另一个名为TableViewController的UITableViewController(使用该项目创建的那个名为RootViewController)。当我触摸RootViewController中的一行时,我创建了一个TableViewController实例。
我创建了一个名为“MyCustomClass”的自定义类。
MyCustomClass.h(完整代码):
#import <Foundation/Foundation.h>
@interface MyCustomClass : NSObject {
NSString *name;
}
@property (nonatomic, retain) NSString * name;
@end
MyCustomClass.m(完整代码):
#import "MyCustomClass.h"
@implementation MyCustomClass
@dynamic name;
@end
我在TableViewController类中有一个MyCustomClass attibute。
TableViewController.h(完整代码):
#import <UIKit/UIKit.h>
#import "MyCustomClass.h"
@interface TableViewController : UITableViewController {
MyCustomClass *aCustomObject;
}
@property (nonatomic, retain) MyCustomClass *aCustomObject;
@end
在TableViewController的加载中,我尝试显示aCustomObject的内容。
TableViewController.m(文件的顶部以及我在模板文件中修改的内容):
#import "TableViewController.h"
@implementation TableViewController
@synthesize aCustomObject;
#pragma mark -
#pragma mark View lifecycle
- (void)viewDidLoad {
[super viewDidLoad];
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
NSLog(@"Name : %@",self.aCustomObject.name);
}
之前,我在RootViewController中为aCustomObject.name创建并赋值:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
TableViewController *detailViewController = [[TableViewController alloc] initWithNibName:@"TableViewController" bundle:nil];
detailViewController.aCustomObject.name = @"The Name";
[self.navigationController pushViewController:detailViewController animated:YES];
}
控制台说:
2011-06-22 07:21:11.087 MyTestApp [12822:207]名称:( null)
我认为这是一个愚蠢的事情,但经过几个小时的尝试后我才发现自己。
非常感谢,请原谅我的英语错误,
答案 0 :(得分:2)
您忘记在tableViewController的viewDidLoad方法中初始化自定义对象。
试试这个。
- (void)viewDidLoad {
[super viewDidLoad];
if(aCustomObject == nil){
self.aCustomObject = [[[MyCustomClass alloc] init] autoRelease];
}
self.aCustomObject.name = @"";
// Uncomment the following line to display an Edit button in the navigation bar for this view controller.
// self.navigationItem.rightBarButtonItem = self.editButtonItem;
//this will show empty here.
NSLog(@"Name : %@",self.aCustomObject.name);
}
答案 1 :(得分:2)
您可以使用@dynamic关键字来判断 你将完成的编译器 属性隐含的API合同 通过提供方法 直接或在运行时实现 使用其他机制,如动态 加载代码或动态方法 解析度。它抑制了警告 否则编译器会 生成,如果找不到合适的 实现。你应该使用它 只有你知道方法会 在运行时可用。
您在问题中声称您包含MyCustomClass.m
的完整来源。你在哪里实现了属性的getter和setter?如果您希望编译器为您生成方法,则应使用
@synthesize name;