【问题标题】:Property 'delegate' not found in object of type exception when trying to use delegate尝试使用委托时,在异常类型的对象中找不到属性“委托”
【发布时间】:2013-09-06 05:44:26
【问题描述】:

无法理解在这种情况下出了什么问题,所以我不能使用委托 - self.plistManager.delegate = self; Property 'delegate' not found on object of type 'DataPlistManager *' 中有一个异常

#import "DataManager.h"
#import "DataPlistManager.h"

@interface DataAdapter : NSObject <DataStorageManager>

@property (nonatomic,strong) DataPlistManager *plistManager;
- (void) saveFile;

@end

及其实现

#import "DataAdapter.h"

@implementation DataAdapter

-(id) initWithDataPlistManager:(DataPlistManager *) manager
{
    self = [super init];
    self.plistManager = manager;
    self.plistManager.delegate = self;
    return self;
}

- (void) saveFile
{
    [self.plistManager savePlist];
}

@end

【问题讨论】:

  • DataPlistManager 是否声明了 delegate 属性?
  • DataAdapter.h 中为类写参考,在此行之前使用@class DataPlistManager @interface DataAdapter : NSObject &lt;DataStorageManager&gt;
  • 显示DataPlistManager的声明。
  • 嗨,请看这个问题stackoverflow.com/questions/18636874/…这是这个问题的父级,不明白在这种情况下我应该如何设置委托。当然,DataPlistManager 中没有属性声明,因为我认为没有必要这样做。但是上一个答案的建议是添加这一行,现在有一个例外。

标签: ios objective-c delegates protocols


【解决方案1】:

您的 DataPlistManager 需要一个属性委托:

@property (weak) id<DataStorageManager> delegate;

【讨论】:

  • retain?我不这么认为。 unsafe_unretained 我想。无论如何,OP 正在使用 ARC!
  • 不应保留委托对象以避免保留循环。它应该很弱
【解决方案2】:

如果您在 "DataPlistManager.h" 文件中添加 #import "DataAdapter.h" 然后将其删除并将其添加到 "DataPlistManager.m" 文件中,我不知道,但几天前我遇到了同样的问题,我使用这个技巧解决了它: )

【讨论】:

  • 这会稍微加快编译速度(一旦你添加了@class DataPlistManager),仅此而已。
  • @trojanfoe - 我真的不知道这是什么但我用这种方式解决了我的问题..:( 谢谢
【解决方案3】:

DataManager 类包含委托属性,因此您应该将对象设置为 DataManager 类的委托,并在委托类中调用方法(发送消息)saveFile:

@implementation DataAdapter

- (void)someMethod) {
    DataManager *dataManagerObject = [[DataManager alloc] init];
    dataManagerObject.delegate = self;
}

@implementation DataManager

- (void)someDelegateMethod {
    [self.delegate saveFile];
}

你确定你了解委托模式的概念吗?

https://developer.apple.com/library/ios/documentation/general/conceptual/CocoaEncyclopedia/DelegatesandDataSources/DelegatesandDataSources.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-08
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    相关资源
    最近更新 更多