我正在尝试从'Employee'实体获取数据,其中包含empId,Name,deptId作为属性。
// Used to Populate data in table
Employee : NSObject
@property (nonatomic, retain) NSString *name;
@property int empId;
@property int deptId;
@synthesize empId, name, deptId;
&安培;
CDEmployee : NSManagedObject
@property (nonatomic, retain) NSString *name;
@property int empId;
@property int deptId;
- (void)convertMyData:(Employee *)emp;
@dynamic empId, name, deptId;
- (void)convertMyData:(Employee *)emp
{
self.empId = emp.empId;
self.name = emp.name;
self.deptId = emp.deptId;
}
// My code to fetch & convert data retured from db to Employee class
-(NSArray *)getAllEmployees:(NSManagedObjectContext*)context
{
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(empId > %@)",[NSNumber numberWithInt:-1],[NSNumber numberWithInt:1]];
NSFetchRequest* req = [self createRequest:context]; // Request is correct
[req setPredicate:predicate];
NSFetchedResultsController* fetchContr = [[NSFetchedResultsController alloc] initWithFetchRequest:req managedObjectContext:context sectionNameKeyPath:nil cacheName:nil];
NSError* error = nil;
[fetchContr performFetch:&error];
NSArray *fetchedObjects = [fetchContr fetchedObjects];
NSMutableArray *result = [[[NSMutableArray alloc] init] autorelease];
for(int i = 0; i < [fetchedObjects count]; i++)
{
CDEmployee *cdEmp = [[fetchedObjects objectAtIndex:i] retain]; // just tried retaing
if (cdEmp)
{
Employee *emp = [[Employee alloc] init];
NSLog(@"Employee - %@", emp); // Shows tht is has object
[cdEmp convertMyData:emp]; //-----> Crashing here
[result addObject:emp];
[emp release];
}
}
[fetchContr release];
return result;
}
我从核心数据中获取结果&amp;我收到了正确的结果,但是当我将核心数据结果转换回Employee(NSObject)
类时,我将 [NSManagedObject convertMyData:]:
无法识别的选择器发送到实例。
我尝试将另一种方法-(void)helloWorld
添加到CDEmployee
课程&amp;尝试了[cdEmp helloWorld];
,但遇到了同样的崩溃。
没有理由导致问题。我有方法定义&amp;在适当的地方实施它甚至没有在编译时向我发出警告。
答案 0 :(得分:0)
以下是将NSManagedObject
转换为NSDictionary
的示例代码。
NSDictionary
比NSObject
更容易处理和操作数据。另请参阅此Git Library以获取其他类似的iOS实用程序类方法。
+(NSDictionary *)convertManagedObjectToDictionary:(NSManagedObject *)managedObject{
if (!managedObject){
NSLog(@"Managed object is nil");
return nil;
}
else{
unsigned int objectsCount;
objc_property_t *objectProperties = class_copyPropertyList([managedObject class], &objectsCount);
NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
for(int i = 0; i < objectsCount; i++) {
objc_property_t property = objectProperties[i];
NSString *name = [NSString stringWithCString:property_getName(property) encoding:NSUTF8StringEncoding];
id object = [managedObject valueForKey:name];
[dictionary setObject:((object == nil) ? [NSNull null] : object) forKey:name];
}
free(objectProperties);
return dictionary;
}
}
答案 1 :(得分:0)
我尝试过不同的方式&amp;得到了解决http://www.raywenderlich.com/934/core-data-tutorial-for-ios-getting-started
答案 2 :(得分:-1)
首先,您应该首先考虑从非技术角度想要实现的目标。实际上是什么?
其次,NSManagedObject
是NSObject
的子类,这意味着您已经拥有NSObject
。恭喜你,你已经完成了!
此外,在您的代码中,您调用了fetchMyData
,但没有告诉我们您在何处定义它或代码是什么样的。也许这里有NSManagedObject
类别?但是,这仍然是为什么你想要这样做的问题。即使您要转换为基础对象,例如另一个答案中建议的NSDictionary
,您仍然会遇到建模关系的问题......
最后,您使用的是什么SDK?如果您还没有使用ARC,则不能认真对待。