【问题标题】:data source (from model) not loading in view controller数据源(来自模型)未加载到视图控制器中
【发布时间】:2014-09-27 20:40:24
【问题描述】:

我有一个 NSArray 填充的字符串保存在一个模型(model.h 和 model.m)中,该数组填充了一个 TableViewController 中的字符串,其中我可以成功 edit saveaccess 我模型中的数据。我想让字符串出现在ViewController 中的UILabel 中,但它只显示(null),这意味着我没有成功从模型中访问数据,有人可以帮忙吗?

PS:我没有显示 TableView 的代码,因为它可以正常工作。

这是我的代码:

模型.h:

#import <Foundation/Foundation.h>

@interface Model : NSObject<NSCoding>

@property (strong, nonatomic) NSArray *array;



+(NSString *)getPathToArchive;
+(Model *)getModel;
+(void)saveModel:(Model *)aModel;


@end

Model.m:

#import "Model.h"

@implementation Model

- (id)init {
    self = [super init];
    return self;
}

+(NSString *)getPathToArchive {
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *docsDir = [paths objectAtIndex:0];
    return [docsDir stringByAppendingPathComponent:@"model.model"];
}

+(Model *)getModel{
    return [NSKeyedUnarchiver unarchiveObjectWithFile:[Model getPathToArchive]];
}

+(void)saveModel:(Model *)aModel {
    [NSKeyedArchiver archiveRootObject:aModel toFile:[Model getPathToArchive]];
}

-(void)encodeWithCoder:(NSCoder *)anEncoder {
    [anEncoder encodeObject:self.model forKey:@"array"];


}

-(id)initWithCoder:(NSCoder *)aDecoder {
    self = [super init];
    if(self) {
        self.model = [aDecoder decodeObjectForKey:@"array"];

    }
    return self;
}

@end

ViewController.h

#import <UIKit/UIKit.h>

@class Model;

@interface ViewController : UIViewController

@property (strong,nonatomic) Model *model;


@end

ViewController.m

#import "ViewController.h"
#import "Model.h"

@interface ViewController ()

@end
@implementation ViewController

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



    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    [Model getModel];

   UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(10, 60, 140, 40)];
    label.text = [NSString stringWithFormat:@"%@", [self.model.array objectAtIndex:0] ];
    //index = 0 as example.
    [self.view addSubview:label];
}



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



@end

【问题讨论】:

  • self.modelViewController 中设置在哪里? 'viewDidLoad`中似乎是nil
  • 我应该在哪里以及如何在 ViewController 中设置 self.model?我认为 [Model getModel] 会完成从模型中“加载”数据的工作。

标签: ios objective-c arrays model-view-controller uilabel


【解决方案1】:

viewDidLoad 中更改以下行:

    [Model getModel];

   self.model = [Mode getModel];

您的模型确实以getModel 方法加载数据。但是您仍然必须将此方法返回的Model 实例分配给您的ViewControllermodel 属性。否则您将无法访问Model

【讨论】:

    猜你喜欢
    • 2016-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-20
    • 2019-11-09
    • 2020-07-25
    • 2016-02-01
    • 1970-01-01
    相关资源
    最近更新 更多