解析XML文件后,我想根据xml的内容创建动态对象,如textbox
和按钮。
我解析了我的xml并检索了数据
我为XMLParser
创建了一个单独的类,并使用我的vieDidload
方法进行了调用。
是否可以从我的mainViewController
类中调用XMLParser
类中的方法来创建动态对象。
答案 0 :(得分:1)
您可以创建自己的类,它将读取已解析的值,并根据您继续创建所有GUI对象。这不是很困难。甚至你可以添加绑定,连接,约束等。 在为我的项目创建框架时,我实际上做了同样的事情。我不能发布代码作为其版权,但我可以分享一些命中。我提到的一个基本提示。
答案 1 :(得分:1)
嗯......你可以使用NSMutableDictionary来做到这一点。 或者您可以从xml
填充之前建模的对象基本上只是为现有对象分配init并设置其属性:
示例:
//parse xml
NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path]];
parser.delegate = (id<NSXMLParserDelegate>)self;
[parser parse];
e.g。公司对象
//callback from parser
- (void)didStartFirmaWithParser:(NSXMLParser*)parser andAttributes:(NSDictionary*)dict {
[[self __didStartEntity:@"RLStoreFirma" withParser:parser] didStartFirmaWithParser:parser andAttributes:dict];
}
//general callback, sets the parsers delegate to THIS new object which then gets filled
- (id)__didStartEntity:(NSString*)name withParser:(AQXMLParser*)parser {
NSEntityDescription *entity = [[store.managedObjectModel entitiesByName] objectForKey:name];
M42StoreEntry *entry = (id)[[NSManagedObject alloc] initWithEntity:entity insertIntoManagedObjectContext:store.managedObjectContext];
entry.store = self->store;
parser.delegate = entry;
return entry;
}
要填充的对象
#import "RLStoreFirma(info).h"
@implementation RLStoreFirma (info)
- (void)didStartFirmaWithParser:(AQXMLParser*)parser andAttributes:(NSDictionary*)dict {
}
- (void)didEndFfkbWithParser:(AQXMLParser*)parser {
self.fkb = currentXMLCharacters;
}
- (void)didEndFfirWithParser:(AQXMLParser*)parser {
self.name = currentXMLCharacters;
}
- (void)didEndFirmaWithParser:(AQXMLParser*)parser {
if(!self.name) {
self.name = self.fkb;
}
[self didEndMainWithParser:(AQXMLParser*)parser];
}
在运行时生成新对象不允许使用iphone sdk / it objc运行时
#pragma mark parser magic
- (SEL) __startSelectorForElement: (NSString *) element
{
NSString * str = nil;
NSMutableString * eSel = [NSMutableString stringWithString: [[element substringWithRange: NSMakeRange(0,1)] uppercaseString]];
if ( [element length] > 1 )
{
[eSel appendString: [element substringFromIndex: 1]];
NSRange range = [eSel rangeOfString: @"-"];
for ( ; range.location != NSNotFound; range = [eSel rangeOfString: @"-"] )
{
NSString * cap = [[eSel substringWithRange: NSMakeRange(range.location+1, 1)] uppercaseString];
range.length += 1;
[eSel replaceCharactersInRange: range withString: cap];
}
}
str = [NSString stringWithFormat: @"didStart%@WithParser:andAttributes:", eSel];
return ( NSSelectorFromString(str) );
}
语法糖使NSParser更好..我不能给你所有的代码,但我认为这可能会有所帮助 - 我希望