0

解析 XML 文件后,我想textbox根据 xml 的内容创建动态对象和按钮。
我已经解析了我的 xml 并检索了数据。
我已经为我的方法创建了一个单独的类XMLParser并进行了调用vieDidloadmainViewController是否可以从我的类中调用我的类中的方法XMLParser来创建动态对象。

4

2 回答 2

1

嗯......你可以用 NSMutableDictionary 来做到这一点。或者您可以从 xml 填充您之前建模的对象


基本上只是分配初始化现有对象并设置其属性:

例子:

//parse xml
NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path]];
parser.delegate = (id<NSXMLParserDelegate>)self;
[parser parse];

例如公司对象

//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 /它的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 更好的语法糖.. 我不能给你所有代码,但我认为这可能会有所帮助 - 我希望

于 2012-11-09T16:00:29.963 回答
1

您可以创建自己的类,该类将读取解析的值,并在此基础上继续创建所有 GUI 对象。这不是很困难。甚至您可以添加绑定、连接、约束等。实际上,在为我的项目创建框架时,我也做了同样的事情。我不能将代码作为它的版权发布,但我可以分享一些点击。我提到的一个基本提示。

于 2012-11-09T14:36:12.830 回答