0

我一直致力于编写一个简单的程序,该程序将在 MVC 模型中显示用户信息。当所有数据都在 View Controller 上时,应用程序运行良好,但是,当尝试将数据移动到 Profile 模型时,应用程序将成功构建,但是不会显示任何信息。这是我现在正在使用的代码。

配置文件视图控制器标头:

DefaultProfileViewController.h

#import <UIKit/UIKit.h>
#import "Profile.h"

@interface DefaultProfileViewController : UIViewController

@property (strong, nonatomic) IBOutlet UILabel *fullNameLabel;
@property (nonatomic, strong) Profile *profile;

@end

配置文件视图控制器实现

#import "DefaultProfileViewController.h"

@class Profile;

@interface DefaultProfileViewController ()

@end

@implementation DefaultProfileViewController

@synthesize profile = _profile;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
        // Do any additional setup after loading the view.

    _fullNameLabel.text = _profile.fullName;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end

Profile 模型标头

#import <Foundation/Foundation.h>

@interface Profile : NSObject

@property (nonatomic, copy) NSString *fullName;

- (void)loadProfile:(NSString *)fullName;

@end

和 Profile 模型实现

#import "Profile.h"

@implementation Profile

@synthesize fullName = _fullName;

- (void)loadProfile:(NSString *)fullName
{
    _fullName = @"Full Name";
}

@end

如前所述,如果在控制器中使用 _fullName = @"Full Name" 部分,这没有问题,并且文本 Full Name 将显示在模拟器中。如果使用 Profile 模型,将构建应用程序,不会出现错误或警告,但不会显示任何信息。我确信我忽略了一些非常简单的东西,所以任何帮助将不胜感激。谢谢。

4

1 回答 1

1

您的代码示例声明了该属性profile,但您实际上没有设置配置文件。

请记住,Objective-C 2.0 中声明的属性只做一件事——即“在你背后”为你创建访问器方法。(在“过去”中,我们不得不手动编写访问器方法。费力;但是您非常擅长内存管理!)

在您的情况下,任何实例化的类都可能DefaultProfileViewController需要创建一个Profile对象并调用setProfileDefaultProfileViewController实例。

像这样的东西:

// create Profile object
Profile *aProfile = [[Profile alloc] init];
[aProfile loadProfile:@"John Doe"];
DefaultProfileViewController *vc = [[DefaultProfileViewController alloc] initWithNibName:@"your nib name" bundle:nil];

// set the profile on your view controller
vc.profile = aProfile;

// add your view controller's view to the view hierarchy
// however you are doing that now...

注意,假设为 ARC。

于 2012-12-09T00:05:34.247 回答