UIButton 从 Core Data 增加一个数组,从另一个类完成
Posted
技术标签:
【中文标题】UIButton 从 Core Data 增加一个数组,从另一个类完成【英文标题】:UIButton that increments an array from Core Data, done from another class 【发布时间】: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 数组中的字符串,但我无法将其传递到我的文本字段中。欢迎对我的问题提出任何见解。
【问题讨论】:
【参考方案1】:您的fetchAllRecords
方法返回一个UsefulCodes
对象数组。所以array
的每个元素都是一个UsefulCodes
对象。因此,您不能将元素分配给文本字段的 text
属性。这就是你的错误的原因。
您需要从UsefulCodes
对象中提取相关字符串。从您的其他代码中,您将 presetList
值存储在 UsefulCodes
对象的 codename
属性中:
codeObj.codeName = [presetList objectAtIndex:i];
因此,反转该过程以从codename
属性中获取相关字符串:
UsefulCodes *codeObj = (UsefulCodes *)array[_num];
NSString *presetListValue = codeObj.codeName;
self.morseTextfield.text = presetListValue;
【讨论】:
以上是关于UIButton 从 Core Data 增加一个数组,从另一个类完成的主要内容,如果未能解决你的问题,请参考以下文章