Я не знаю, квалифицирует ли это, как неправильно понято - но для меня, просто неизвестный.
я был рад узнать о DataLoadOptions и как я могу управлять, к каким таблицам присоединяются, когда я делаю особый запрос.
Посмотрите здесь для большего количества информации: MSDN: DataLoadOptions
Вам придется откатить свой собственный, используя Функции времени выполнения Objective-C . Вот очень простой пример кода. Обратите внимание, что получение ivars класса не приводит к получению ivars его суперкласса. Вам нужно будет сделать это явно, но все функции присутствуют во время выполнения.
#import <objc/objc-runtime.h>
#include <inttypes.h>
#include <Foundation/Foundation.h>
@interface Foo : NSObject
{
int i1;
}
@end
@implementation Foo
@end
@interface Bar : Foo
{
NSString* s1;
}
@end
@implementation Bar
@end
int main(int argc, char** argv)
{
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
unsigned int count;
Ivar* ivars = class_copyIvarList([Bar class], &count);
for(unsigned int i = 0; i < count; ++i)
{
NSLog(@"%@::%s", [Bar class], ivar_getName(ivars[i]));
}
free(ivars);
[pool release];
}
Да, вполне возможно:
int numIvars = 0;
Ivar * ivars = class_copyIvarList([anInstanceOfAClass class], &numIvars);
NSMutableDictionary * pairs = [NSMutableDictionary dictionary];
for (int i = 0; i < numIvars; ++i) {
Ivar ivar = ivars[i];
NSString * ivarName = [NSString stringWithCString:ivar_getName(ivar) encoding:NSUTF8StringEncoding];
id ivarValue = [anInstanceOfAClass valueForKey:ivarName];
[pairs setObject:ivarValue forKey:ivarName];
}
free(ivars);
NSLog(@"%@", pairs);
Я не уверен только в отношении ivars, но если они определены как свойства, это можно получить доступ к доступным свойствам класса.
Я использовал SQLitePersistentObjects для пары проектов, и у него есть полезный код, который получает свойства, определенные в классе, для использования при вычислении сериализации в sqlite и обратно.
] Он использует функцию class_copyPropertyList, чтобы получить список доступных свойств в классе.
Более конкретно: