在模型中存储 UIImage 的最佳方式
Best Way to Store a UIImage in a Model
我对 iOS 开发和 MVC 概念还很陌生,但据我了解,该模型不应包含任何 UI 相关内容。我的 images.xcassets
文件夹中有一个名为 defaultImage
的图像,我想在初始化时将其设置为 class 的默认图像。此 class 是我的模型的一部分,具有以下 public 界面:
#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 进入模型的规则?如果不是,请解释为什么不,如果是,还有其他方法吗?谢谢!
最好的方法是在模型中有图片名称或图片路径,你可以在任何需要的地方加载图片。
#import <Foundation/Foundation.h>
@interface myClass : NSObject
@property (strong, nonatomic) NSString *name;
@property (strong, nonatomic) NSString *imageName;
@end
最坏的情况,如果您必须在 class 本身中获取数据,请按以下方式使用。
- (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;
}
我对 iOS 开发和 MVC 概念还很陌生,但据我了解,该模型不应包含任何 UI 相关内容。我的 images.xcassets
文件夹中有一个名为 defaultImage
的图像,我想在初始化时将其设置为 class 的默认图像。此 class 是我的模型的一部分,具有以下 public 界面:
#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 进入模型的规则?如果不是,请解释为什么不,如果是,还有其他方法吗?谢谢!
最好的方法是在模型中有图片名称或图片路径,你可以在任何需要的地方加载图片。
#import <Foundation/Foundation.h>
@interface myClass : NSObject
@property (strong, nonatomic) NSString *name;
@property (strong, nonatomic) NSString *imageName;
@end
最坏的情况,如果您必须在 class 本身中获取数据,请按以下方式使用。
- (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;
}