【问题标题】:Properties defined in category not found in original class在原始类中找不到类别中定义的属性
【发布时间】:2014-10-22 23:46:08
【问题描述】:

我有一个非常大的班级,我正在尝试从中创建一个类别。在原始类的 .m 文件中,我有 2 个对象(在类别 .h 文件中定义)出现“未识别的标识符”构建错误。

这是UploadViewController+CreateExportFiles.h类中其中一个的对象定义:

@property (strong, nonatomic) NSArray *booksArray;

原始类(UploadViewController.h)的.h文件如下所示:

#import "UploadViewController.h"
#import "UploadViewController+CreateExportFiles.h"

booksArray 在我遇到错误的类中的用法是:

if( [[[booksArray objectAtIndex:i] tranCode] isEqualToString:@"A"]) 

我还需要做些什么来解决这个错误吗?

【问题讨论】:

  • 部分问题可能是objectAtIndex 返回id 并且解析器无法识别tranCode
  • 不,因为在我拆分这个类之前(原始文件太大而无法管理),所有代码都可以正常工作。

标签: objective-c compiler-warnings objective-c-category declared-property


【解决方案1】:

类别不能将存储添加到类。通过将属性声明从主类接口移动到一个类别,您已经阻止编译器为您创建 ivar booksArray,这是您使用 [booksArray objectAtIndex:i] 引用的实体。

你需要把属性放回主类接口或者类扩展,或者use a workaround

【讨论】:

  • 嗨乔希...解决了这个问题;我将如何调用现在属于类别类的类?我有另一个类实例化原始类并调用该方法;当然,它已经找不到了......即 UploadViewController *uvc = [[UploadViewController alloc]init]; [uvc createTabExportFile:@"Backup"];
  • 分类头需要在任何你想调用分类中定义的方法的地方导入,包括属性。
  • 啊,废话!我知道...只是忘记了...再次感谢您的帮助;我很感激……祝你晚上愉快。标清
  • 没问题,@spokane-dude。
  • 对不起,乔什......仍然无法正常工作......即使我按照你的建议做了同样的问题......除了现在它是相同两个对象的类别类中的“未声明的标识符”...... . 我已经尝试了我能想到的一切都无济于事......
猜你喜欢
  • 2020-02-11
  • 2016-11-13
  • 2018-04-26
  • 2011-08-09
  • 1970-01-01
  • 1970-01-01
  • 2021-06-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多