解析XML文件后,我想根据xml的内容创建动态对象,如textbox
和按钮。
我已经解析了我的xml并检索了数据。
我为XMLParser
创建了一个单独的课程,并在我的vieDidload
方法中进行了调用。 是否可以调用我的mainViewController
类中的方法从我的XMLParser
类创建动态对象。Objective-C创建动态对象
0
A
回答
1
您可以创建自己的类,它将读取解析的值并基于该类继续创建所有GUI对象。这不是非常困难。即使你可以添加绑定,连接,约束等。 我实际上在为我的项目创建框架时做了同样的事情。我不能将代码作为版权发布,但我可以分享一些点击。我提到的一个基本提示。
1
呃......你可以用NSMutableDictionary来做到这一点。 或填写您从XML
基本上只是ALLOC初始化现有的对象并设置其属性之前建模对象:
例如:
//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更好..我不能给你所有的代码,但我墨水这可能有所帮助 - 我希望
+0
谢谢老兄.... –
相关问题
- 1. Swift:动态对象创建
- 2. 动态创建JS对象
- 3. 动态创建Javascript对象
- 4. 动态创建UIView对象
- 5. 动态创建对象
- 6. 动态创建MVC对象
- 7. 动态Javascript对象创建
- 8. 创建动态对象(Eiffel)
- 9. 动态创建对象
- 10. 动态对象创建
- 11. 动态创建JavaScript对象?
- 12. 动态创建JSON对象
- 13. 动态创建C#对象
- 14. 动态创建对象java
- 15. 创建JavaScript对象动态
- 16. 创建动态JavaScript对象
- 17. 动态对象创建
- 18. Unity创建动态对象
- 19. 创建动态对象python
- 20. 从动态对象创建对象
- 21. 从对象动态创建Xml
- 22. 在C++中动态创建对象?
- 23. 在groovy中动态创建json对象
- 24. 旋转AS3动态创建的对象
- 25. C#动态对象创建/修改?
- 26. 删除动态创建的对象
- 27. 动态更新/创建对象属性
- 28. 如何动态创建声音对象
- 29. 动态对象创建和const_set
- 30. 如何动态创建对象?
感谢您的信息 –