私は Cocoa の初心者で、Windows で C/C++ を使用していくつかの小さなアプリを開発しています。Cocoaで「シンプル」なアプリを作りたい。ユーザー固有の XML ファイルの場合、ファイル ノードは「エンドユーザーが表示可能」に表されます。
NSTextField とのインターフェースを作成しました。「XMLFile」という NSDocument のサブクラスを作成したので、Xcode プロジェクトで「XMLFile.h」と「XMLFile.m」を取得しました。
アプリの plist で、新しい「ドキュメント タイプ」を設定しました: XML ファイル - 拡張機能: xml - 役割: ビュー - クラス: XMLFile - ストア タイプ: XML
ここに私の「XMLFile.h」があります:
#import <Cocoa/Cocoa.h>
@interface FichierXML : NSDocument {
}
IBOutlet NSTextField *dateField;
IBOutlet NSTextField *titleField;
IBOutlet NSTextField *descField;
IBOutlet NSTextField *vidfileField;
IBOutlet NSTextField *imgfileField;
IBOutlet NSObjectController *object;
NSUInteger *mask;
@end
そして、ここに私の「XMLFile.m」があります:
#import "XMLFile.h"
@implementation XMLFile
- (BOOL)readFromData:(NSData *)datafile ofType:(NSString *)typeName error:(NSError **)outerror
{
NSMutableArray* ReportCreationDate = [[NSMutableArray alloc] initWithCapacity:10];
NSMutableArray* ReportTitle = [[NSMutableArray alloc] initWithCapacity:10];
NSMutableArray* ReportDescription = [[NSMutableArray alloc] initWithCapacity:10];
NSMutableArray* VideoPath = [[NSMutableArray alloc] initWithCapacity:10];
NSMutableArray* VideoThumbnailImageName = [[NSMutableArray alloc] initWithCapacity:10];
NSXMLDocument* doc = [[NSXMLDocument alloc] initWithData:datafile options:mask error:outerror];
NSXMLElement* root = [doc rootElement];
NSArray* dateElement = [root nodesForXPath:@"//Report/ReportCreationDate" error:nil];
for(NSXMLElement* xmlElement in dateElement)
[dateElement setStringValue:[xmlElement stringValue]];
NSArray* titleElement = [root nodesForXPath:@"//Report/ReportTitle" error:nil];
for(NSXMLElement* xmlElement in titleElement)
[titleField setStringValue:[xmlElement stringValue]];
NSArray* descElement = [root nodesForXPath:@"//Report/ReportDescription" error:nil];
for(NSXMLElement* xmlElement in descElement)
[descField setStringValue:[xmlElement stringValue]];
NSArray* vidfileElement = [root nodesForXPath:@"//Report/Videos/Video/VideoPath" error:nil];
for(NSXMLElement* xmlElement in vidfileElement)
[vidfileField setStringValue:[xmlElement stringValue]];
NSArray* imgfileElement = [root nodesForXPath:@"//Report/Videos/Video/VideoThumbnailImageName" error:nil];
for(NSXMLElement* xmlElement in imgfileElement)
[imgfileField setStringValue:[xmlElement stringValue]];
[doc release];
[ReportCreationDate release];
[ReportTitle release];
[ReportDescription release];
[VideoPath release];
[VideoThumbnailImageName release];
return YES;
}
@end
ユーザーが XMLFile を開くと、XMLDocument がファイルを分析してノードのデータを抽出し、それを別の NSTextField に送信します。しかし、うまくいきません。
誰かが私を助けることができれば。