【发布时间】:2014-09-27 20:40:24
【问题描述】:
我有一个 NSArray 填充的字符串保存在一个模型(model.h 和 model.m)中,该数组填充了一个 TableViewController 中的字符串,其中我可以成功 edit save 和access 我模型中的数据。我想让字符串出现在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.model在ViewController中设置在哪里? 'viewDidLoad`中似乎是nil -
我应该在哪里以及如何在 ViewController 中设置 self.model?我认为 [Model getModel] 会完成从模型中“加载”数据的工作。
标签: ios objective-c arrays model-view-controller uilabel