Исключение при передаче значения с плавающей точкой из массива в координаты - PullRequest
1 голос
/ 22 января 2012

Я получаю исключение из-за этих строк кода. Не знаю, почему это так ... Помогите мне .. Причина:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:   
'-[__NSArrayI floatValue]: unrecognized selector sent to instance 0x7c57840'

coord.latitude = [[[self.holdingArray objectAtIndex:k] 
valueForKey:@"latitude"]floatValue];
 coord.longitude = [[[self.holdingArray objectAtIndex:k] valueForKey:@"longitude"]  
 floatValue];

Редактировать 1

 -(BOOL)textFieldShouldReturn:(UITextField *)textField
{
[appDelegate.dealerDataGlobalArray removeAllObjects];
NSString *requestString;

requestString = [NSString stringWithFormat:@"http://www.hvinfotech.net/projects/carwash
/search.php?search=%@",textField.text];
NSString *strCOntents1 = [NSString stringWithContentsOfURL:[NSURL 
URLWithString:requestString] encoding:NSUTF8StringEncoding error:nil];

NSLog(@"Data: %@",strCOntents1);

NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:[NSURL  
URLWithString:requestString]];
DealerDetailParser *parser = [[DealerDetailParser alloc] 
initDealerDetailParserXMLParser];
[xmlParser setDelegate:parser];
[xmlParser parse];
appDelegate = (AppDelegate *)[[UIApplication sharedApplication]delegate];
NSLog(@"dealerDataGlobalArray...... %@",[appDelegate.dealerDataGlobalArray 
description]);
[holdingArray addObject:appDelegate.dealerDataGlobalArray];
NSLog(@"holdingArray...... %@",holdingArray);
flagForHoldingArray = YES;    
[self loadOurAnnotations]; 
[textField resignFirstResponder];
return YES;
}

Я отредактировал, чтобы это было более понятно.Я звоню в веб-службу, чтобы получить данные, соответствующие тому, что вводится в текстовое поле.После этого я вызываю метод, в котором была опубликована предыдущая строка кода ...

Edit2

это дает как

    2012-01-23 00:27:35.475 CarWashApp[2584:11603] (
    {
    businessdesc = "having a garage and teamof 10members, originaly belongs to mumbai 
    maharashtra.";
    "businessdesc_de" = "having a garage and teamof 10members, originaly belongs to 
    mumbai maharashtra.";
    city = vadodra;
    "city_de" = "dadar_de";
    companyname = "Maruti Suzki Ltd";
    "companyname_de" = "Maruti Suzki Ltd _de";
    contactname = "bijju sharma";
    "contactname_de" = "bijju sharma_de";
    coupondetails = "10% Discount";
    "coupondetails_de" = "10% Discount _de";
    email = "bsharma@gmail.com";
    friday = "Friday: Closed";
    happyhour = "10:00 AM to 5:00 PM";
    id = 5;
    latitude = "22.30731";
    logo = "http://www.hvinfotech.net/projects/carwash/upload/images/Sunset.jpg";
    longitude = "73.181098";
    monday = "Monday: Closed";
    payment = Visa;
    payments = "";
    phone1 = 07932453453;
    phone2 = 07934344444;
    postcode = JU113;
    saturday = "Saturday:9:30 AM - 4:00 PM";
    services = "";
    state = Groningen;
    "state_de" = Groningen;
    streetaddress1 = "500 golf Road,";
    "streetaddress1_de" = "sectore 5 d_de";
    streetaddress2 = "airport Road";
    "streetaddress2_de" = "";
    sunday = "Sunday:9:30 AM - 4:00 PM";
    thursday = "Thursday: Closed";
    tuesday = "Tuesday:9:30 AM - 4:00 PM";
    website = "http://hvinfotechPvtLtd.com";
    wednesday = "Wednesday: Closed";
}
 )
  2012-01-23 00:27:43.434 CarWashApp[2584:11603] (
"22.30731"
)

мне нужнотолько выше значения, то есть "22.30731" в качестве координаты, но это показывает ошибку, если я также пишу какordin.latitude = [[self.holdingArray objectAtIndex: k] valueForKey: @ "latitude"];

Ответы [ 2 ]

1 голос
/ 22 января 2012

Какие объекты есть в self.holdingArray - словарях? Хорошо, что это за объект в словаре для ключа "долгота"? Похоже, что они массивы. Хорошей практикой является разбиение таких вложенных операторов, чтобы их можно было легко отлаживать.

0 голосов
/ 22 января 2012

Как сказал @Rayfleck, объект в массиве может быть не таким, как вы ожидаете. Используйте отладчик или NSLog(), чтобы узнать, что это за объект на самом деле.

Еще одна возможность, у вас может быть ошибка управления памятью где-то. ARC включен?

И, наконец, это может быть проблема безопасности потока. В таком случае, удачи в поиске! На самом деле нет простого способа отследить проблемы с многопоточностью, кроме как прочитать каждую строку кода и попытаться найти ошибку.

EDIT:

У вас есть эта строка кода:

[holdingArray addObject:appDelegate.dealerDataGlobalArray];

Похоже, вы добавляете объект массива в массив holdingArray. Объекты массива возвращают другой массив, когда вы отправляете им valueForKey: (ищите valueForKey в документации для NSArray ...).

В любом случае, объект массива не отвечает на floatValue. Только NSString и NSNumber объекты отвечают на floatValue.

Вы должны NSLog() эти объекты, потому что я думаю, что они не те, что вы ожидаете от них:

NSLog(@"%@", [self.holdingArray objectAtIndex:k]);
NSLog(@"%@", [[self.holdingArray objectAtIndex:k] valueForKey:@"latitude"]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...