Это мой первый случай, когда вы пытаетесь выполнить основные данные и испытываете некоторые проблемы с работой. У меня есть синтаксический анализатор xml в моем приложении, который я пытаюсь добавить всю информацию в основные данные, но продолжаю сбой при запуске. У меня есть основные данные, настроенные с 1 Entity как «Темы». В этом объекте у меня есть 15 атрибутов. Ниже приведен автоматический файл xcode, созданный для ManagedObject после создания моей .CoreData.Вставить управляемый объект в CoreData из xml
Themes.h
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
@interface Themes : NSManagedObject
@property (nonatomic, retain) NSString * themeName;
@property (nonatomic, retain) NSString * themeArtist;
@property (nonatomic, retain) NSString * themeImage;
@property (nonatomic, retain) NSString * themeDescription;
@property (nonatomic, retain) NSString * twitterName;
@property (nonatomic, retain) NSString * themePrice;
@property (nonatomic, retain) NSString * screenshots;
@property (nonatomic, retain) NSString * cydiaLink;
@property (nonatomic, retain) NSString * themeVersion;
@property (nonatomic, retain) NSString * deciption;
@property (nonatomic, retain) NSString * repo;
@property (nonatomic, retain) NSString * hd;
@property (nonatomic, retain) NSString * sd;
@property (nonatomic, retain) NSString * ipad;
@end
#import "Themes.h"
@implementation Themes
@dynamic themeName;
@dynamic themeArtist;
@dynamic themeImage;
@dynamic themeDescription;
@dynamic twitterName;
@dynamic themePrice;
@dynamic screenshots;
@dynamic cydiaLink;
@dynamic themeVersion;
@dynamic deciption;
@dynamic repo;
@dynamic hd;
@dynamic sd;
@dynamic ipad;
-(void)setThemeName:(NSString *)themeName{
self.themeName = [themeName copy];
}
@end
Вот мои XML-файлы Parser, в которых должно произойти все волшебство. В целом все прекрасно работает с моим анализатором это только тогда, когда я
"themesObjects = (темы *) [NSEntityDescription
insertNewObjectForEntityForName: themesObjects.themeName"
inManagedObjectContext: managedObjectContext];»
приложение будет врезаться Я предполагаю, потому что я не правильно вставить объект в CoreData.
#import <Foundation/Foundation.h>
#import "ThemeParseObject.h"
#import "Themes.h"
@class ThemeParseObject;
@interface ThemeXMLParser : NSObject <NSXMLParserDelegate> {
NSMutableData *recivedData;
NSMutableArray *themes;
NSMutableString *currentNodeContent;
NSXMLParser *parser;
Themes *themesObjects;
NSManagedObjectContext *managedObjectContext;
NSMutableArray *themeArray;
ThemeParseObject *currentTheme;
}
@property (readonly, retain) NSMutableArray *themes;
@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, retain) NSMutableArray *themeArray;
-(id) loadXMLByURL:(NSString *)urlString;
@end
#import "ThemeXMLParser.h"
@implementation ThemeXMLParser
@synthesize themes;
@synthesize managedObjectContext;
@synthesize themeArray;
-(id) loadXMLByURL:(NSString *)urlString{
themesObjects = [[Themes alloc]init];
managedObjectContext = [[NSManagedObjectContext alloc] init];
themes = [[NSMutableArray alloc] init];
NSURL *url = [NSURL URLWithString:urlString];
NSData *data = [[NSData alloc] initWithContentsOfURL:url];
parser = [[NSXMLParser alloc] initWithData:data];
parser.delegate = self;
[parser parse];
return self;
}
- (void) parser:(NSXMLParser *)parser didStartElement:(NSString *)elementname
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
attributes:(NSDictionary *)attributeDict
{
if ([elementname isEqualToString:@"theme"])
{
currentTheme = [ThemeParseObject alloc];
}
}
- (void) parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName
namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName
{
NSManagedObjectContext *context = [self managedObjectContext];
NSManagedObject *ObjectsToInsert = [NSEntityDescription
insertNewObjectForEntityForName:@"Themes"
inManagedObjectContext:context];
if ([elementName isEqualToString:@"name"]) {
currentTheme.themeNameString = currentNodeContent;
themesObjects.themeName = currentTheme.themeNameString;
[ObjectsToInsert setValue:themesObjects.themeName forKey:@"themeName"];
}
if ([elementName isEqualToString:@"creator"]) {
currentTheme.themeCreator = currentNodeContent;
// themesObjects = (Themes *)[NSEntityDescription
insertNewObjectForEntityForName:@"themeArtist"
inManagedObjectContext:managedObjectContext];
}
if ([elementName isEqualToString:@"price"]) {
currentTheme.themePrice = currentNodeContent;
//themesObjects = (Themes *)[NSEntityDescription
insertNewObjectForEntityForName:@"themePrice"
inManagedObjectContext:managedObjectContext];
}
if ([elementName isEqualToString:@"twitter"]) {
currentTheme.creatorTwitterName = currentNodeContent;
//themesObjects = (Themes *)[NSEntityDescription
insertNewObjectForEntityForName:@"twitterName"
inManagedObjectContext:managedObjectContext];
}
if ([elementName isEqualToString:@"link"]) {
currentTheme.cydiaLink = currentNodeContent;
//themesObjects = (Themes *)[NSEntityDescription
insertNewObjectForEntityForName:@"cydiaLink"
inManagedObjectContext:managedObjectContext];
}
if ([elementName isEqualToString:@"deciption"]) {
currentTheme.deciption = currentNodeContent;
//themesObjects = (Themes *)[NSEntityDescription
insertNewObjectForEntityForName:@"deciption"
inManagedObjectContext:managedObjectContext];
}
if ([elementName isEqualToString:@"screenshots"]) {
currentTheme.screenShots = currentNodeContent;
}
if ([elementName isEqualToString:@"promo"]) {
currentTheme.tblViewImage = currentNodeContent;
}
if ([elementName isEqualToString:@"description"]) {
currentTheme.themeDescription = currentNodeContent;
}
if ([elementName isEqualToString:@"version"]) {
currentTheme.themeVersion = currentNodeContent;
// NSLog(@"version: %@", currentNodeContent);
}
if ([elementName isEqualToString:@"repo"]) {
currentTheme.themeRepo = currentNodeContent;
// NSLog(@"repo: %@", currentNodeContent);
}
if ([elementName isEqualToString:@"HD"]) {
currentTheme.HD = currentNodeContent;
// NSLog(@"HD: %@", currentNodeContent);
}
if ([elementName isEqualToString:@"SD"]) {
currentTheme.SD = currentNodeContent;
// NSLog(@"SD: %@", currentNodeContent);
}
if ([elementName isEqualToString:@"iPad"]) {
currentTheme.ipad = currentNodeContent;
//NSLog(@"iPad: %@", currentNodeContent);
}
if ([elementName isEqualToString:@"iPhoneScreenshots"]) {
currentTheme.fullScreenShots = currentNodeContent;
// themesObjects = (Themes *)[NSEntityDescription
insertNewObjectForEntityForName:@"screenshots"
inManagedObjectContext:managedObjectContext];
// NSLog(@"fullScreenShots: %@", currentNodeContent);
}
if ([elementName isEqualToString:@"theme"])
{
[themes addObject:currentTheme];
[currentTheme release];
currentTheme = nil;
[currentNodeContent release];
currentNodeContent = nil;
}
}
- (void) parser:(NSXMLParser *)parser foundCharacters:(NSString *)string
{
currentNodeContent = (NSMutableString *) [string
stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
}
Это то, что получает регистрируется, когда приложение падает
2012-01-06 08:02:18.619 ThemeCatcher[2667:207] CoreData: error: Failed to call
designated initializer on NSManagedObject class 'Themes'
2012-01-06 08:02:19.000 ThemeCatcher[2667:207] -[Themes themeName]: unrecognized
selector sent to instance 0x87072d0
Если у кого есть какие-либо предложения или идеи, где я могу идти отсюда, это было бы потрясающе. Я прошу прощения, если это похоже на много кода, на который можно смотреть, но я чувствовал, что это нескричало, чтобы дать другим понять, что действительно происходит внутри кода ... Спасибо, я ценю любую помощь, предоставленную очень!
Я понял, что ничего не делаю с моим управляемым объектом, поэтому считаю, что я исправил это и обновил вопрос. Я благодарю вас за ответ и, похоже, все еще имею ту же проблему, хотя теперь я инициализирую объект и вставляю строку с помощью [ObjectsToInsert setValue: themesObjects.themeName forKey: @ "themeName"]; – FreeAppl3
Хорошо ... добавлено обновление, которое может помочь. – Caleb