【发布时间】:2017-04-22 19:23:45
【问题描述】:
我有一个按钮,当它被按下时,它应该增加一,结果会在文本字段中显示一个新字符串。我有一个核心数据管理器类,其中包含一个应该检索我的数组的方法,但是每当我按下按钮时,应用程序就会崩溃。我留下一个错误说明...
"Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UsefulCodes rangeOfCharacterFromSet:]: unrecognized selector sent to instance 0x6000000a3f60'"
“UsefulCodes”是我的 Core Data 实体的名称,“codeName”和“codeDescription”分别是我的 presetList 和 codeDescArray 的属性。我认为它不起作用,因为我试图将核心数据对象放入文本字段,但数组中的所有对象都是字符串,我如何让它成功传递到文本字段?我将在下面发布相关代码。
来自 CoreDataManager -
@implementation CoreDataManager
+(CoreDataManager*)sharedInstance {
static CoreDataManager *sharedObject;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedObject = [[CoreDataManager alloc] init];
});
return sharedObject;
}
-(void)storeListFirstTime {
//http://morsecode.scphillips.com/morse.html
NSArray* presetList = [NSArray arrayWithObjects:@"AS",
@"BCNU",
@"CL",
@"CT",
@"CUL",
@"K",
@"QSL",
@"QSL?",
@"QRX?",
@"QRV",
@"QRV?",
@"QTH",
@"QTH?",
@"R",
@"SN",
@"SOS",
@"73",
@"88",
nil];
NSArray* codeDescArray = [NSArray arrayWithObjects:@"Wait",
@"Be seeing You",
@"Going off air",
@"Start Copying",
@"See you later",
@"Over",
@"I acknowledge receipt",
@"Do you acknowledge",
@"Should I wait",
@"Ready to copy",
@"Are you ready to copy?",
@"My location is ...",
@"What is your location?",
@"Roger",
@"Understood",
@"Distress message",
@"Best regards",
@"Love and kisses",
nil];
//Saves the initial list of items
for(int i = 0; i < presetList.count; i++) {
NSManagedObjectContext *context = [self context];
UsefulCodes *codeObj = [NSEntityDescription insertNewObjectForEntityForName:@"UsefulCodes"
inManagedObjectContext:context];
codeObj.codeName = [presetList objectAtIndex:i];
codeObj.codeDescription = [codeDescArray objectAtIndex:i];
NSLog(@"CODEOBJ: %@", codeObj);
}
[self saveContext];
}
//THIS IS THE METHOD I AM CALLING FOR MY BUTTON METHOD
-(NSArray*)fetchAllRecords {
NSManagedObjectContext *context = [self context]; //this context is conected to persistant container
NSError *error = nil;
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"UsefulCodes"];
NSArray *records = [context executeFetchRequest:request
error:&error];
if(error == nil && records.count > 0) {
return [records copy];
}
else {
//Handle error by returning new array
return [NSArray new];
}
}
上面的代码只是设置了我硬编码到我的数组中的初始值(我只对从 presetList 数组中获取值以显示在文本字段中感兴趣)以及容纳我添加到的任何新代码和描述任何数组。现在这是我的“MainViewController”中负责循环遍历我的数组的方法。
在头文件中我声明了一个名为 num 的属性。
@property(nonatomic)int num;
这是实现文件中的方法。
- (void)getQuickMorseCode {
NSArray *array = [[CoreDataManager sharedInstance] fetchAllRecords];
if(_num == 0 || _num > 0) {
if(_num >= array.count){
_num = 0;
}
//GETTING THE SPECIFIC INDEX OF THE ARRAY, THIS IS WHERE THE PROBLEM LIES
self.morseTextfield.text = array[_num];
[self convertInput:self.morseTextfield.text];
[self buttonAppear];
_num++;
}
}
我的目标是在我的 CoreDataManager 文件中显示 presetList 数组中的字符串,但我无法将其传递到我的文本字段中。欢迎对我的问题提出任何见解。
【问题讨论】:
标签: ios objective-c arrays core-data uibutton