我搜索了一下,但没有找到我的问题的答案。我是Objective-c的初学者,我目前正在尝试使用词典。我有一个名为“SETestBank”的类,它创建3个图像字典,然后将它们添加到一个大字典中。我这样做是因为我可以添加更多更小的词典。我已经创建了一个特定的“accessBank”方法来通过其他类将对象拉出来。
SETestBank.m
#import "SETestBank.h"
@implementation SETestBank
@synthesize mathBankA, mathBankB, mathBankC, mathTest;
- (id)init
{
[self createBankA];
[self createBankB];
[self createBankC];
[self createTest];
return 0;
}
- (NSMutableDictionary *)createBankA
{
mathBankA = [[NSMutableDictionary alloc] init];
for (int i=0; i < 11; i++) {
NSString *aKey = [NSString stringWithFormat:@"%da", i];
NSString* imageName = [NSString stringWithFormat:@"%da.png",i];
[mathBankA setObject:imageName forKey:aKey];
NSLog(@"%@", aKey);
}
return mathBankA;
}
//same occurs to generate bankB and bankC
- (NSMutableDictionary *)createTest
{
mathTest = [[NSMutableDictionary alloc] init];
[mathTest addEntriesFromDictionary:mathBankA];
[mathTest addEntriesFromDictionary:mathBankB];
[mathTest addEntriesFromDictionary:mathBankC];
return mathTest;
}
- (NSString *)accessBank:(NSString *)accessor
{
NSString *img = [mathTest objectForKey:accessor];
return img;
}
@end
现在这段代码似乎运行正常。创建了词典,控制台日志显示正确的键和目标文件名(图像都在项目中并且正确命名)
但是,当我在视图控制器中访问它并尝试将图像应用到UIImageView时,我什么也得不到。
SEViewController:
- (void)viewDidLoad
{
SETestBank *mathTest = [[SETestBank alloc] init];
UIImage *img = [UIImage imageNamed:[mathTest accessBank:@"1a"]];
NSString *test = [mathTest accessBank:@"1a"];
NSLog(@"%@", test);
[imageView setImage:img];
[self.view addSubview:imageView];
[super viewDidLoad];
}
此处的日志只返回null以及“CUICatalog:提供的资产名称无效:( null),或无效比例因子:1.000000”我收集的错误是尝试将null分配给图像。我很难过这个。如果我硬编码图像显示“1a.png”而不是试图通过键访问它,它工作正常,但这不是我想要完成的。 imageView连接到storyboard中的UIImageView,视图控制器设置为使用SEViewController作为它的类。
感谢您的帮助!
答案 0 :(得分:2)
在init方法中,返回0,表示无(nil)
- (id)init
{
[self createBankA];
[self createBankB];
[self createBankC];
[self createTest];
return 0;
}
将此更改为
- (id)init
{
if (self = [super init]) {
[self createBankA];
[self createBankB];
[self createBankC];
[self createTest];
}
return self;
}
可能会解决您的问题。
答案 1 :(得分:0)
您在SETestBank中的init
返回0,因此当您执行
SETestBank *mathTest = [[SETestBank alloc] init];