我对iOS开发和MVC概念都很陌生,但根据我的理解,该模型不应该包含任何与UI相关的内容。我的images.xcassets
文件夹中有一个名为defaultImage
的图像,我想在初始化时将其设置为我的类的默认图像。这个类是我的模型的一部分,并具有以下公共接口:
#import <Foundation/Foundation.h>
@interface myClass : NSObject
@property (strong, nonatomic) NSString *name;
@property (strong, nonatomic) NSData *imageData;
@end
我将图像存储为NSData
的原因是因为我假设模型中不允许使用UI,因此我不能在此处使用UIImage
。但是,我无法成功初始化imageData
以包含图像数据。我尝试了以下方法:
#import "myClass.h"
@implementation myClass
- (instancetype)init
{
self = [super init];
if (self) {
self.name = @"No Name";
self.imageData = [[NSData alloc] initWithContentsOfFile:@"defaultImage"];
}
return self;
}
@end
就像我说的那样,imageData
会包含nil
。环顾四周后,我找到了以下解决方案:
#import <UIKit/UIKit.h>
#import "myClass.h"
@implementation myClass
- (instancetype)init
{
self = [super init];
if (self) {
self.name = @"No Name";
self.imageData = [[NSData alloc] init];
self.imageData = UIImagePNGRepresentation([UIImage imageNamed:@"defaultImage"]);
}
return self;
}
@end
所以我的问题是,这是否打破了不允许在模型中使用UI和UIKit的规则?如果没有,请解释原因,如果是,是否有其他方法可以做到这一点?谢谢!
答案 0 :(得分:2)
最好的方法是在模型中使用图像名称或图像路径,然后您可以在任何需要的位置加载图像。
#import <Foundation/Foundation.h>
@interface myClass : NSObject
@property (strong, nonatomic) NSString *name;
@property (strong, nonatomic) NSString *imageName;
@end
最坏的情况是,如果您必须在类本身中拥有数据,请使用如下。
- (instancetype)init
{
self = [super init];
if (self) {
self.name = @"No Name";
//self.imageData = [[NSData alloc] init]; //--Not required
self.imageData = UIImagePNGRepresentation([UIImage imageNamed:@"defaultImage"]);
}
return self;
}