0

Objective-C 有点新,所以请多多包涵。

首先,我使用 FMDB 库进行 SQLite 管理。

我正在使用以下方法填充 NSMutableDictionary:

//....
while([effectivenessResults next]) //this loops through the results of a query (verified that this works)
    {
        NSMutableArray *dFactors = [[NSMutableArray alloc]init];
        if([resultDict objectForKey:[effectivenessResults stringForColumn:@"tName"]])
        {
            dFactors = [resultDict objectForKey:[effectivenessResults stringForColumn:@"tName"]];
        }
        NSNumber *effectivenessValToAdd = [NSNumber numberWithDouble:[effectivenessResults doubleForColumn:@"dFactor"]/100];
        [dFactors addObject:[NSMutableString stringWithFormat:@"%@",effectivenessValToAdd]];
        [resultDict setObject:dFactors forKey:[effectivenessResults stringForColumn:@"tName"]];
    }

我正在正确返回数组(我已经验证了这一点)。然后,我在其他地方访问这个 NSMutableDictionary,使用以下方法:

for(id type in tEffect) //tEffect is the NSMutableDictionary, returned from the previous code (there known as resultDict)
{
    effectivenessString = [self getEffectivenessString:[tEffect objectForKey:type]];

    tInfo = [NSMutableString stringWithFormat:@"%@", [tInfo stringByAppendingFormat:@"%@: %@\n", type, effectivenessString]];

}

它调用以下两种方法:

-(NSMutableString *)getEffectivenessString:(NSNumber *) numberPassedIn
{
    double dFactor = [numberPassedIn doubleValue];
    //adds the above value to a string, this will not affect anything
}

-(NSNumber *) listProduct: (NSMutableArray *)listOfValues //calculates the product of an NSMutableArray of numbers
{
NSNumber *product=[NSNumber numberWithDouble:1.0];

for(int i = 0; i < [listOfValues count]; i++)
{
    NSNumber *newVal = [listOfValues objectAtIndex:i];
    product = [NSNumber numberWithDouble:[product doubleValue] * [newVal doubleValue]];
}
return product;
}

所以,当我调用这些方法时,我收到以下错误:

2013-08-04 13:52:04.514 effectCalculator[45573:c07] -[__NSArrayM doubleValue]:              
unrecognized selector sent to instance 0x8c19e00
2013-08-04 13:52:04.521 effectCalculator[45573:c07] *** Terminating app due to uncaught     
exception 'NSInvalidArgumentException', reason: '-[__NSArrayM doubleValue]: unrecognized 
selector sent to instance 0x8c19e00'

需要注意的重要事项:此错误发生在检索时,而不是 NSMutableDictionary 的填充。这意味着这本字典的数量不是问题,但它可能与它在检索数据时遇到问题的原因有关。

那么什么可能导致这个错误呢?

4

1 回答 1

2

您的代码很难遵循。将来请发布一个可以编译的最小示例,或者至少是一个可理解的代码块。

话虽如此,我相信您的问题在于这一点:

for(id type in tEffect) //tEffect is the NSMutableDictionary, returned from the previous code (there known as resultDict)
{
    effectivenessString = [self getEffectivenessString:[tEffect objectForKey:type]];

resultDict包含什么?

[resultDict setObject:dFactors ...

但是dFactors是一个NSMutableArray。好吧,getEffectivenessString期待 a NSNumber,而不是 a NSMutableArray。所以它抱怨。此外,我认为您打算让该方法采用字符串,而不是数字,尽管我不明白为什么您在加载它们时不进行转换(而不是在使用它们时)。

由于 Objective C 不支持强类型数组或字典,因此您在未来防范这种情况的最佳选择是更合乎逻辑地命名您的变量。当您尝试调用一个需要一个带有数组的数字的方法时,它应该会脱颖而出。

于 2013-08-04T18:31:16.400 回答