ios - 将数据存储在自定义类中的 NSArray 中并在其他类/ Controller 中使用

标签 ios iphone objective-c cocoa-touch cocoa

在制作我的第一个应用程序时,我真的陷入了一个小困境,尝试了 SOF 上的各种帖子和许多变体,但无法做我想做的事情。
我有一个 UITableViewController 需要一些数据,它需要的数据我正在一个自定义数据类中的 NSArray 中填充,我是为了管理我的项目需要的所有数据。
我的数据类中有一个实例变量/属性,它从函数获取所需的数据。数据在函数中显示得很好,但我无法在主 TableView 函数中访问它,我尝试创建数据类对象并访问它,但显示为 null。

这是一些示例代码。

dataClass.h

@interface GDAPIhandler : NSObject {  
        NSMutableArray *relImageUrl;  
    }  
@property (strong,nonatomic) NSArray *timeLine;  
@property (strong,nonatomic) NSMutableArray *relImageUrl;

dataClass.m

self.relImageUrl = [[NSMutableArray alloc] init];
[self.relImageUrl addObject:[UIImage imageWithData:thumb]];

tableViewController.h

#import "dataClass.h"

tableViewControll.m

dataClass *test = [dataClass alloc] init; 
test.relImageUrl      //this is nil

我在代码中正确地初始化并调用了函数和类,上面是我正在做的事情的示例,但这就是我所处的情况。
任何帮助将不胜感激

---- 尝试我理解的阅读评论后的真正 InCode -----
数据源类

the data source class

TableView 类

The Table view class where I want to use the array in, I have already included the datasource class

最佳答案

首先,除非您正在对实例变量(relImageUrl)做一些特殊的事情,否则请将其删除,因为不需要它。如果保留它,请确保正确合成它 - 当前约定是在它前面添加下划线(如 _relImageUrl 中)。但同样,您可能根本不需要它。

您还没有显示 relImageUrl 的任何 getter/setter,因此假设您没有在那里做任何特殊的事情。

您还将私有(private)类接口(interface)显示为 GDAPIhandler,但您将其称为 dataClass.h - 这没有任何意义。

如果您在按照上述请求之前没有实际添加任何元素,那么如何设置 TableView 的项目计数?

理想情况下,您的自定义类中应该有一个 NSArray 属性,并且通过公开以下方法对其进行操作:

  1. 获取项目数量的方法
  2. 一种从给定索引中提取项目的方法
  3. 添加/删除项目的可能方法
  4. 实例化/填充数组的方法 - 但请不要像您似乎正在做的那样在请求单元格时这样做......这种方法不会有好结果

所有这些都假设您尝试使用自定义类来“隐藏”对底层数组的访问。建议您按照其中一些思路进行重构,以使自己以后的工作变得更轻松。

更新

我刚刚看到了您上次回复的屏幕截图。当您不分享所有相关信息时,不确定您希望人们如何提供帮助。

如果要在 block 内分配给 relImageUrl,则需要在其前面加上 __block 存储修饰符。此外,不要在 block 内引用 self,因为它可能导致循环引用。

因此,您可以尝试类似的操作(在函数内部但在输入任何 block 之前)。

__weak CustomClass* weakSelf = self;  // don't capture self in block 
__block NSMutableArray* weakImageUrl = weakSelf.relImageUrl;  

..尝试一些类似的事情。再说两个要点:

  1. 不要在 block 内引用 self
  2. 对需要在 block 内发生变化的任何对象使用 __block 存储修饰符

...祝你好运...

关于ios - 将数据存储在自定义类中的 NSArray 中并在其他类/ Controller 中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19769939/

相关文章:

objective-c - 使用 XCode4 中的文件夹引用自动包含/编译源代码

iphone - 通过 CGAffineTransformScale 计算的边界、帧和帧之间的差异

ios - 如何优化代码并快速加载 UIPickerView 数据?

ios - 子类化 UIGestureRecognizer 和 UILongPressGestureRecognizer

ios - 主键是否也是Realm中的必需属性?

ios - 图层 <MetalLayer : 0x28218ed50> Slows Down UITableView Reloading 的可绘制为零

javascript - 移动 safari 中的背景图像被拉伸(stretch)

ios - 如何为 iOS 编译 Qt 的 MySQL 驱动程序

ios - 如何从 swift 类到 Objective C 类访问变量

iPhone - 自动化测试?