我正在学习ObjC和可可开发,并且遇到了一个真正的“难题”。筋疲力尽的谷歌,我恭敬地装饰我的绝望帽并呈现给你:
一个类和一个视图控制器:
类'Content Window'导入一个viewcontroller实例并将其放在一个窗口中:
ContentWindow.h
#import <Foundation/Foundation.h>
#import <WebKit/WebView.h>
#import "ContentViewController.h"
@interface ContentWindow : NSWindow{
ContentViewController* viewController;
}
@property IBOutlet ContentViewController* viewController;
-(NSWindow *) newWindow;
@end
ContentWindow.m
#import "ContentWindow.h"
@implementation ContentWindow
@synthesize viewController;
-(NSWindow *) newWindow{
//Builds the window as 'window' and displays it successfully here
//... [code redacted for brevity]
// Build view
viewController = [[ContentViewController alloc] initWithNibName:@"ContentViewController" bundle:nil];
[window setContentView: viewController.view];
NSString *urlString = @"http://www.google.com";
[[viewController.webView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlString]]];
[viewController.title setStringValue:@"my title"];
}
@end
我试图用界面做两件事:
[viewController.title setStringValue:@"my title"];
这成功地将视图元素'title'设置为“我的标题”。
[[viewController.webView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlString]]];
然而,这会引发错误:
Receiver type 'WebFrame' for instance message is a forward declaration.
并以红色下划线:
viewController.webView mainFrame
我的视图控制器如下:
ContentViewController.h
#import <Cocoa/Cocoa.h>
#import <WebKit/WebView.h>
@interface ContentViewController : NSViewController {
IBOutlet NSTextField *title;
IBOutlet WebView *webView;
}
@property IBOutlet WebView *webView;
@property IBOutlet NSTextField *title;
@end
ContentViewController.m
#import "ContentViewController.h"
@interface ContentViewController ()
@end
@implementation ContentViewController
@synthesize title, webView;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
}
return self;
}
@end
最后要使用这个类,我将使用
从AppDelegate类实例化一个内容窗口contentWindow = [[ContentWindow new] newWindow];
将ContentWindow.h导入AppDelegate.h并设置:
__strong NSWindow * contentWindow
作为AppDelegate合成的实例变量。
我已经在IB中链接了两个项目(当然!)我还在我的项目中添加了Webkit基础,这是在另一个线程中提出的。
我不能为我的生活理解发生了什么。我知道合乎逻辑的答案是放下Xcode并拿起“学习Xcode和Objective c”一书(带有一个书签,大约在我傲慢到足以认为我学到了足够多的东西的地方),但是在我这样做之前,在机会上:
有人可以帮忙吗?
一如既往地感谢AtFPt。
答案 0 :(得分:1)
通常这个错误消息意味着类的类型不知道(因为@class声明)。
确保您的代码可以看到WebFrame
的声明。
如果是这样,也许您稍后添加它,XCode可以使用较旧的元数据。在这种情况下,构建之前的干净通常会有所帮助。