我正在使用以下函数atm,但我正在撞墙撞墙。
-(double)fetchTimeUntilNextUpdateInSeconds{
NSFetchRequest *fetchReq = [[NSFetchRequest alloc]initWithEntityName:@"DataInfo"];
fetchReq.predicate = [NSPredicate predicateWithFormat:@"data_info_id == 1"];
[fetchReq setPropertiesToFetch:[NSArray arrayWithObject:@"nextupdate"]];
NSArray *array = [self.context executeFetchRequest:fetchReq error:nil];
NSString *string = [[array valueForKey:@"nextupdate"] stringValue];
NSLog(@"string: %@ array count:%lu", string, (unsigned long)array.count);
NSArray *hoursAndMins = [string componentsSeparatedByString:@":"];
int hours = [hoursAndMins[0] intValue];
int mins = [hoursAndMins[1] intValue];
return (mins*60)+(hours*60*60);
}
日志:字符串:( “05:42” )数组计数:1
我收到以下错误:-[__NSArrayI componentsSeparatedByString:]: unrecognized selector sent to instance 0x174224060'
公平地说,我尝试在字符串上调用“stringValue”方法(如代码片段所示)并获得以下内容:
-[__NSArrayI stringValue:]: unrecognized selector sent to instance 0x174224060'
梯子让我觉得我已经收到了一个字符串,因为stringValue
不是那个类的方法......但是为什么第一个工作不会呢。更好的是,我在这里做错了什么?
答案 0 :(得分:1)
我猜,executeFetchRequest
返回一个总是包含一个项目的数组。
错误是方法valueForKey
不明确。它是key value coding
方法以及NSManagedObject
的方法。如果要获取一个对象的键的值,那么首先从数组中获取第一个对象,然后调用valueForKey
。
NSArray *array = [self.context executeFetchRequest:fetchReq error:nil];
// get the value of the key `nextUpdate` of the first item of the array
NSString *string = [array[0] valueForKey:@"nextupdate"];
要明确将valueForKey
发送到数组时发生的情况,请参阅此代码,它会返回数组所有成员的键id
的值数组。
NSArray *array = @[@{@"name" : @"John", @"id" : @"1"}, @{@"name" : @"Jane", @"id" : @"2"}];
NSLog(@"%@", [array valueForKey:@"id"]); // --> @[@"1", @"2"]
答案 1 :(得分:0)
呃,也可能是这样的情况(" 05:42")有引号,你可能需要在将它作为字符串写入数组之前转义。或者你可能只需要对字符串AGAIN的值进行类型转换,但不要这样做,为什么不首先尝试这个并告诉我们会发生什么。
NSArray *hoursAndMins = [[[array valueForKey:@"nextupdate"] stringValue] componentsSeparatedByString:@":"];