0

textboxXMLファイルを解析した後、xmlの内容に基づいてボタンなどの動的オブジェクトを作成したいと思います。
xmlを解析し、データを取得しました。
の個別のクラスを作成し、メソッドXMLParserで呼び出しを行いました。クラス内のメソッドをクラスからvieDidload呼び出して、動的オブジェクトを作成することはできますか?mainViewControllerXMLParser

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 オブジェクトを作成する独自のクラスを作成できます。これはそれほど難しくありません。バインディング、接続、制約などを追加することもできます。プロジェクトのフレームワークを作成しているときに、実際に同じことをしました。著作権としてコードを投稿することはできませんが、いくつかのヒットを共有できます。私が言及した1つの基本的なヒント。

于 2012-11-09T14:36:12.830 に答える