4

同じコードはすでにここで質問されていますが、おそらくObjective-Cに慣れていないため、自分で解決できない別の問題に対処しているため、質問することにしました:)

webberAppDelegate.h:

#import <Cocoa/Cocoa.h>
#import <WebKit/WebKit.h>

@interface webberAppDelegate : NSObject <NSApplicationDelegate> {
    NSWindow *window;
    WebView *webber;
}

@property (assign) IBOutlet NSWindow *window;
@property (assign) IBOutlet WebView *webber;

@end

webberAppDelegate.m:

#import "webberAppDelegate.h"

@implementation webberAppDelegate

@synthesize window;
@synthesize webber;

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
    NSString *urlString = @"http://www.apple.com";
    // Insert code here to initialize your application
    [[webber mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlString]]];
}

@end

したがって、webberAppDelegate.m では、この部分に関する私の問題は次のとおりです。

  @synthesize window;
  @synthesize webber;

誰が私にこの長いエラーを与えます:

Existing instance variable 'window' for property 'window' with  assign attribute must be __unsafe_unretained

他の変数「webber」についても実質的に同じです。

Existing instance variable 'webber' for property 'webber' with  assign attribute must be __unsafe_unretained

ご協力ありがとうございます。何日もの間、Stackoverflow コミュニティに本当に感謝しています !!

4

1 に答える 1

5

ARC のインスタンス変数のデフォルトの所有資格はstrongであり、@robMayoff が述べたように割り当ては同じでunsafe_unretainedあるため、コードは次のようになります。

@interface webberAppDelegate : NSObject <NSApplicationDelegate> {
   __strong NSWindow *window;
   __strong WebView *webber;
}

@property (unsafe_unretained) IBOutlet NSWindow *window;
@property (unsafe_unretained) IBOutlet WebView *webber;

@Firoze が提供するリンクされた回答で述べたように、プロパティ宣言と iVar は、所有権の修飾が一致している必要があります。したがって、解決策は__strong、上記のコードを作成する__unsafe_unretainedか、インスタンス変数宣言を完全に削除して、コンパイラがそれを処理するようにすることです。

コメント内のリンクされた回答で同じ解決策が提供されています。情報を追加するだけです。

于 2013-03-26T04:36:30.243 に答える