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

对于其他 var "webber" 几乎相同:

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

感谢您的帮助,我真的很感谢 Stackoverflow 社区!

4

1 回答 1

5

ARC 中实例变量的默认所有权资格是strong,并且像@robMayoff 提到的 assign 一样,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 回答