从数组中检索字符串时出错

时间:2015-08-09 15:30:34

标签: ios objective-c

我正在使用以下函数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不是那个类的方法......但是为什么第一个工作不会呢。更好的是,我在这里做错了什么?

2 个答案:

答案 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:@":"];