2010-06-01 1 views
0

Je ne comprends pas pourquoi j'obtiens cette erreur. Voici le code correspondant:iPhone Objective C - erreur: valeur du pointeur utilisée lorsqu'une valeur à virgule flottante était attendue

Photo.h

#import <CoreData/CoreData.h> 

@class Person; 

@interface Photo : NSManagedObject 
{ 
} 

@property (nonatomic, retain) NSData * imageData; 
@property (nonatomic, retain) NSNumber * Latitude; 
@property (nonatomic, retain) NSString * ImageName; 
@property (nonatomic, retain) NSString * ImagePath; 
@property (nonatomic, retain) NSNumber * Longitude; 
@property (nonatomic, retain) Person * PhotoToPerson; 

@end 

Photo.m

#import "Photo.h" 

#import "Person.h" 

@implementation Photo 

@dynamic imageData; 
@dynamic Latitude; 
@dynamic ImageName; 
@dynamic ImagePath; 
@dynamic Longitude; 
@dynamic PhotoToPerson; 

@end 

Ceci est une classe mapViewController.m j'ai créé. Si je lance cela, les lignes CLLocationDegrees CLLat et CLLong:

   CLLocationDegrees CLLat = (CLLocationDegrees)photo.Latitude;  
       CLLocationDegrees CLLong = (CLLocationDegrees)photo.Longitude; 

me donnent l'erreur: valeur de pointeur utilisée où une valeur de virgule flottante était attendue.

for(int i = 0; i < iPerson; i++) 
     { 
      //get the person that corresponds to the row indexPath that is currently being rendered and set the text 
      Person * person = (Person *)[myArrayPerson objectAtIndex:i]; 
      //get the photos associated with the person 
      NSArray * PhotoArray = [person.PersonToPhoto allObjects]; 
      int iPhoto = [PhotoArray count]; 

     for(int j = 0; j < iPhoto; j++) 
     { 
      //get the first photo (all people will have atleast 1 photo, else they will not exist). Set the image 
      Photo * photo = (Photo *)[PhotoArray objectAtIndex:j]; 

      if(photo.Latitude != nil && photo.Longitude != nil) 
      { 
       MyAnnotation *ann = [[MyAnnotation alloc] init]; 
       ann.title = photo.ImageName; 
       ann.subtitle = photo.ImageName; 

       CLLocationCoordinate2D cord;      
       CLLocationDegrees CLLat = (CLLocationDegrees)photo.Latitude;  
       CLLocationDegrees CLLong = (CLLocationDegrees)photo.Longitude; 

       cord.latitude = CLLat; 
       cord.longitude = CLLong; 

       ann.coordinate = cord; 
       [mkMapView addAnnotation:ann];    

      }  
     } 
    } 
+0

S'il vous plaît montrer le message du compilateur, y compris la ligne de l'erreur. – asandroq

+0

le message du compilateur actuel est "error: valeur du pointeur utilisée où une valeur à virgule flottante était attendue", j'ai modifié le message d'origine et ajouté les lignes au-dessus du 3ème bloc de code. – Mausimo

Répondre

5

NSNumber est pas un type de flotteur, mais un pointeur, de sorte que vous devez faire pour le convertir:

CLLocationDegrees CLLat = (CLLocationDegrees)[photo.Latitude doubleValue];  
CLLocationDegrees CLLong = (CLLocationDegrees)[photo.Longitude doubleValue]; 
+3

CLLocationDegrees est un 'double'. Vous devriez utiliser la méthode '-doubleValue'. – kennytm

+0

Cela fonctionne, merci. Suis-je incapable de faire (double) photo.Latitude; parce que j'essaye de convertir un pointeur de NSNumber à une valeur en moulant? Merci! – Mausimo

+1

Oui, le moulage ne fonctionnera pas ici car comme dans c, il réinterprétera simplement l'adresse que le pointeur désigne comme un double, ce qui vous donnera une valeur absurde (bien que cela puisse vous permettre de compiler.) C'est un endroit pour Soyez reconnaissant pour l'erreur. –

Questions connexes