xcode -[__NSArrayM objectForKey:]: 无法识别的选择器发送到目标 c 中的实例错误
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/9907486/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
-[__NSArrayM objectForKey:]: unrecognized selector sent to instance Error in Objective c
提问by Hacer Akac
I try to insert Json Datas to sqlite database. I got data from another class and they are in a dictionary (responce.item) but I can't insert to database. I got an error like this: unrecognized selector sent to instance. How can I solve this problem? My method is below. Thanks for your reply.
我尝试将 Json 数据插入到 sqlite 数据库中。我从另一个班级获得了数据,它们在字典 (responce.item) 中,但我无法插入到数据库中。我收到这样的错误:无法识别的选择器发送到实例。我怎么解决这个问题?我的方法如下。感谢您的回复。
edited code:
编辑的代码:
-(void)processDoneWithRequestName:(NSString*)tagName{
sqlite3_stmt *stmt=nil;
sqlite3 *cruddb;
const char *sql = "INSERT INTO LabUpdate (IsSuccess, ProducerId, Latitude, Longitude, Altitude, Slope, SampleDate, PackageNo, Status, Description) VALUES (?,?,?,?,?,?,?,?,?,?)";
//NSArray *pathsArray=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString *doumentDirectoryPath=@"/Users/ds/Desktop/SqliteTest/SqliteTest";
NSString *cruddatabase=[doumentDirectoryPath stringByAppendingPathComponent:@"SqliteTestDb.sqlite"];
if ([tagName isEqualToString:Logins]) {
int keys = [[response.item objectForKey:@"Lipton"] count];
NSLog(@"count %i",keys);
for (int i=0; i<keys; i++)
{
NSString *str1 =[[[response.item objectForKey:@"Lipton"] objectAtIndex:i]objectForKey:@"IsSuccess"];
NSString *str2 =[[[response.item objectForKey:@"Lipton"] objectAtIndex:i]objectForKey:@"ProducerId"];
NSString *str3 =[[[response.item objectForKey:@"Lipton"] objectAtIndex:i]objectForKey:@"Latitude"];
NSString *str4 =[[[response.item objectForKey:@"Lipton"] objectAtIndex:i]objectForKey:@"Longitude"];
NSString *str5 =[[[response.item objectForKey:@"Lipton"] objectAtIndex:i]objectForKey:@"Altitude"];
NSString *str6 =[[[response.item objectForKey:@"Lipton"] objectAtIndex:i]objectForKey:@"Slope"];
NSString *str7 =[[[response.item objectForKey:@"Lipton"] objectAtIndex:i]objectForKey:@"SampleDate"];
NSString *str8 =[[[response.item objectForKey:@"Lipton"] objectAtIndex:i]objectForKey:@"PackageNo"];
NSString *str9 =[[[response.item objectForKey:@"Lipton"] objectAtIndex:i]objectForKey:@"Status"];
NSString *str10 =[[[response.item objectForKey:@"Lipton"] objectAtIndex:i]objectForKey:@"Description"];
NSLog(@"str1 %@",str1);
NSLog(@"str2 %@",str2);
NSLog(@"str3 %@",str3);
NSLog(@"str4 %@",str4);
NSLog(@"str5 %@",str5);
NSLog(@"str6 %@",str6);
NSLog(@"str7 %@",str7);
NSLog(@"str8 %@",str8);
NSLog(@"str9 %@",str9);
NSLog(@"str10 %@",str10);
sqlite3_open([cruddatabase UTF8String], &cruddb);
sqlite3_prepare_v2(cruddb, sql, 1, &stmt, NULL);
sqlite3_bind_int(stmt, 1, [str1 integerValue]);
sqlite3_bind_int(stmt, 2, [str2 integerValue]);
sqlite3_bind_double(stmt, 3, [str3 floatValue]);
sqlite3_bind_double(stmt, 4, [str4 floatValue]);
sqlite3_bind_double(stmt, 5, [str5 floatValue]);
sqlite3_bind_double(stmt, 6, [str6 floatValue]);
sqlite3_bind_text(stmt, 7, [str7 UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_bind_int(stmt, 8, [str8 integerValue]);
sqlite3_bind_int(stmt, 9, [str9 integerValue]);
sqlite3_bind_text(stmt, 10, [str10 UTF8String], -1, SQLITE_TRANSIENT);
sqlite3_step(stmt);
sqlite3_finalize(stmt);
sqlite3_close(cruddb);
}
}
}
}
回答by edc1591
That error means that the object is an NSArray
not an NSDictionary
. You can access the dictionary objects using -objectAtIndex:
.
该错误意味着该对象NSArray
不是NSDictionary
. 您可以使用 访问字典对象-objectAtIndex:
。
EDIT: It's hard to tell from the information you've provided, but try changing this line:
编辑:从您提供的信息中很难判断,但请尝试更改此行:
int keys = [[response.item objectForKey:@"Lipton"] count];
to this:
对此:
int keys = [[[response.item objectForKey:@"Lipton"] objectAtIndex:0] count];
or:
或者:
int keys = [[[response.item objectAtIndex:0] objectForKey:@"Lipton"] count];
Like I said, I can't give a decisive answer without more information.
就像我说的,如果没有更多信息,我无法给出决定性的答案。