2012-04-12 11 views
0

Ich würde gerne wissen, ob es möglich ist, eine Unterklasse von NSManagedObject zu initalisieren? Ich habe eine Klasse "Actualite", die eine Unterklasse von NSManagedObject ist, und wenn ich diese Klasse initialisieren möchte, bekomme ich diesen Fehler: "CoreData: error: Konnte bestimmten Initialisierer auf NSManagedObject Klasse Actualite nicht aufrufen", und die App stürzt danach ab diese Nachricht "- [Actualite setTitre:]: Unbekannter Selektor an Instanz gesendet 0x8433be0"Init NSManagedObject Unterklasse

Hier ist mein Code:

-(void) recupererActualites { 
listeNouvellesActualites = [[NSMutableArray alloc] init]; 

// Convert the supplied URL string into a usable URL object 
NSURL *url = [NSURL URLWithString:FACE06_RSS]; 

// Create a new rssParser object based on the TouchXML "CXMLDocument" class, this is the 
// object that actually grabs and processes the RSS data 
CXMLDocument *rssParser = [[CXMLDocument alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding options:0 error:nil]; 

// Create a new Array object to be used with the looping of the results from the rssParser 
NSArray *resultNodes = NULL; 

// Set the resultNodes Array to contain an object for every instance of an node in our RSS feed 
resultNodes = [rssParser nodesForXPath:@"//item" error:nil]; 

NSMutableArray* tmp = [[NSMutableArray alloc] init]; 
for (CXMLElement* resultElement in resultNodes) { 
    // Create a temporary MutableDictionary to store the items fields in, which will eventually end up in blogEntries 
    NSMutableDictionary *blogItem = [[NSMutableDictionary alloc] init]; 
    NSMutableArray* categories = [[NSMutableArray alloc] init]; 

    // Create a counter variable as type "int" 
    int counter; 

    // Loop through the children of the current node 
    for(counter = 0; counter < [resultElement childCount]; counter++) { 
     // Add each field to the blogItem Dictionary with the node name as key and node value as the value 
     if([[[resultElement childAtIndex:counter] name] isEqual:@"category"]) 
      [categories addObject:[[resultElement childAtIndex:counter] stringValue]]; 
     else { 
      if ([[resultElement childAtIndex:counter] stringValue] != nil) 
       [blogItem setObject:[[resultElement childAtIndex:counter] stringValue] forKey:[[resultElement childAtIndex:counter] name]]; 
      else 
       [blogItem setObject:@"" forKey:[[resultElement childAtIndex:counter] name]]; 
     } 
    } 

    Actualite* actu = [[Actualite alloc] init]; 
    [blogItem setObject:categories forKey:@"categories"]; 
    [actu initWithDictionnary:blogItem]; 
    [tmp addObject:actu]; 
    //[actu release]; 

    [categories release]; 
    [blogItem release]; 
} 
listeNouvellesActualites = tmp; 

[rssParser release]; 
resultNodes = nil; 

// Stockage des actualités en local 
[self stockerActualites]; 
} 

Und die initWithDictionary Methode alle Attribute der Actualite Klasse.

Ich habe auch versucht

Actualite* actu = [[Actualite alloc] initWithEntity:[NSEntityDescription entityForName:@"Actualite" inManagedObjectContext:managedObjectContext] insertIntoManagedObjectContext:managedObjectContext]; 

und

Actualite* actu = (Actualite*)[NSEntityDescription entityForName:@"Actualite" inManagedObjectContext:managedObjectContext]; 

statt

Actualite* actu = [[Actualite alloc] init]; 

Die Fehler verschwinden, aber die App an diesem Punkt beendet. Ich weiß nicht, was kann ich tun ...

Hat schon jemand dieses Problem?

Vielen Dank!

Antwort

4

Die Idee ist, dass man für ein neues Objekt fragt in einem Kontext geschaffen werden, und dann verwenden Sie es:

Actualite* actu = [NSEntityDescription insertNewObjectForEntityForName:@"Actualite" inManagedObjectContext:managedObjectContext]; 
Verwandte Themen