2012-04-12 3 views
0

Я хотел бы знать, можно ли инициализировать подкласс NSManagedObject? У меня есть класс «Actualite», который является подклассом NSManagedObject, и когда я хочу инициализировать этот класс, я получаю эту ошибку: «CoreData: ошибка: не удалось вызвать назначенный инициализатор в классе NSManagedObject Actualite», и приложение сработает после это сообщение "- [Actualite setTitre]: непризнанные селектор направлен например 0x8433be0"Начальный подкласс NSManagedObject

Вот мой код:

-(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]; 
} 

И initWithDictionary метод установить все атрибуты Actualite класса.

Я также попытался

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

и

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

вместо

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

Ошибки исчезают, но приложение останавливается в этой точке. Я не знаю, что я могу сделать ...

У кого-то уже была эта проблема?

Большое спасибо!

ответ

4

Идея заключается в том, что вы просите для нового объекта, который будет создан в контексте, а затем использовать его:

Actualite* actu = [NSEntityDescription insertNewObjectForEntityForName:@"Actualite" inManagedObjectContext:managedObjectContext]; 
Смежные вопросы