2016-10-19 1 views
0

J'ai un selectedActivity d'objet défini comme suit:IOS: Erreur NSKnownKeysDictionary1

@property (strong, nonatomic) Activities *selectedActivity; 

Au point où je dois travailler avec elle billots comme:

{ 
    actname = "Running"; 
    aid = 23; 
} 

L'objet Activités est un objet NSManaged et son fichier .h ressemble à ceci.

@interface Activities : NSManagedObject 

@property (nonatomic, retain) NSString * actname; 
@property (nonatomic, retain) NSNumber * aid; 
@end 

Je suis en train de placer une des propriétés de l'objet dans une variable pour les utiliser avec les éléments suivants:

NSNumber *aid = _selectedActivity.aid; 

Cependant, la ligne ci-dessus donne le message d'erreur suivant:

[NSKnownKeysDictionary1 aid]: unrecognized selector sent to instance 0x147842fb0 

Quelqu'un peut-il expliquer cette erreur et comment la réparer?

Merci pour vos suggestions.

Mise à jour: cadre de l'activité sélectionnée

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { 

    _selectedActivity =([_activities objectAtIndex:row]); 
    NSLog(@"selectedActivity in pickerview%@",_selectedActivity); 
} 
//activities in .h file 
    @property (strong, nonatomic) NSArray *activities; 
//setting of activities 
self.activities= [self getActivities]; 

//method that gets activities 
- (id) getActivities{ 
    NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Activities"]; 
    NSSortDescriptor *sort = [NSSortDescriptor sortDescriptorWithKey:@"created" ascending:NO]; 
    [fetchRequest setSortDescriptors:@[sort]]; 
    NSError *error  = nil; 
    self.managedObjectContext = [Model sharedInstance].managedObjectContext; 

    NSArray *results = [self.managedObjectContext executeFetchRequest:fetchRequest 
                    error:&error]; 
     NSMutableArray *mutableresults = [results mutableCopy]; 
    [mutableresults removeObjectIdenticalTo:[NSNull null]]; 

    return mutableresults; 
} 
+0

Afficher le code où vous attribuez une valeur à 'selectedActivity'. Apparemment c'est un dictionnaire et pas une instance de 'Activités ' – dan

Répondre

0

Les résultats sont à venir comme un dictionnaire.

au lieu de l'extraction habituel NSManagedObject valeur de style:

Objective-C NSString *actname = _selectedActivity.actname; NSNumber *aid = _selectedActivity.aid;

Swift let actname:String = _selectedActivity.actname let aid:Int = _selectedActivity.aid

utilisation la valeur de style NSDictionary ret Rieval, comme ceci:

Objective-C: NSString *actname = [_selectedActivity valueForKey:@"actname"]; NSNumber *aid = [[_selectedActivity valueForKey:@"aid"] intValue];

Swift (testé au 3.0.1) _selectedActivity(forKey: "actname") as! String _selectedActivity.value(forKey: "aid") as! Int