0

私は 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

私はインターフェースで2つのことをしようとしています:

[viewController.title setStringValue:@"my title"];

これにより、ビュー要素 'title' が "my title" に正常に設定されます。

[[viewController.webView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlString]]];

ただし、これはエラーをスローします。

Receiver type 'WebFrame' for instance message is a forward declaration.

行のセクションに赤で下線を付けます。

viewController.webView mainFrame

私のView Controllerは次のとおりです。

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 を置いて、「Learn Xcode and Objective c」の本を手に取ることだとわかっています (何かを試すのに十分なほど学んだと思うほど傲慢だった場所の約半分にブックマークが付いています)。私がそれを行う前に、偶然に:

誰でも助けてもらえますか?

いつもありがとう、AtFPt。

4

1 に答える 1

1

通常、このエラー メッセージは、(@class によって宣言されているため) クラスの型が不明であることを意味します。コードが の宣言を認識できることを確認してくださいWebFrame。もしそうなら、後でそれを追加すると、XCode は古いメタデータで動作します。この場合、通常、ビルド前のクリーンが役立ちます。

于 2012-08-30T13:25:29.173 に答える