gpt4 book ai didi

xml - Cocoa XML 阅读器应用程序

转载 作者:行者123 更新时间:2023-12-03 16:44:25 24 4
gpt4 key购买 nike

我是Cocoa的新手,只是在Windows上用C/C++开发一些小应用程序。我想在 Cocoa 上制作一个“简单”的应用程序。当用户特定的 XML 文件时,文件节点表示为“最终用户可查看”。

我用一些 NSTextField 制作了一个界面。我创建了一个名为“XMLFile”的 NSDocument 子类,因此我在 Xcode 项目中得到了“XMLFile.h”和“XMLFile.m”。

在我的应用程序的 plist 中,我设置了一个新的“文档类型”:XML 文件 - 扩展名:xml - 角色: View - 类: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。但它不起作用。

如果有人可以帮助我。

最佳答案

您并没有太具体地说明什么不起作用,但这里有一两个可能会导致麻烦的事情的猜测...

作为 Cocoa 新用户,很容易忘记的一件事是 IBOutlet 必须实际连接到 Interface Builder 中。按住 Control 键并从每个文本字段拖动到 Document.xib 中的文件所有者,并确保将它们分配到正确的导出。

另一个看起来很奇怪的项目(虽然我不确定它会导致问题)是您使用 for 循环来设置 stringValue文本字段。如果每个元素的数组中有多个项目,则您需要在设置文本字段的值之前自行连接字符串。重复设置该值只会删除以前的值。如果每个数组中只有一项,为什么不简单地执行以下操作:

NSArray *dateElement = [root 
nodesForXPath:@"//Report/ReportCreationDate"
error:nil];
[dateField setStringValue:
[[dateElement objectAtIndex:0] stringValue]];

最后,您可能需要尝试确保在查询 NSXMLDocument 时没有错误:

NSError *dateErr;
NSArray *dateElement = [root
nodesForXPath:@"//Report/ReportCreationDate"
error:&dateErr];
if( dateElement ){
// set the stringValue
}
else {
// inspect the error
}

关于xml - Cocoa XML 阅读器应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5261696/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com