1

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

这是一些示例代码。

数据类.h

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

数据类.m

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

表视图控制器.h

#import "dataClass.h"

表视图控件.m

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

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

---- Real InCode After Trying what I understand阅读评论-----
数据源类

数据源类

表视图类

我想在其中使用数组的表视图类,我已经包含了数据源类

4

3 回答 3

0

请检查链接https://github.com/slysid/iOS/tree/master/Tableview中的项目。我做了一个你需要的模型。我将数据源填充在用于填充表格视图的外部对象中。

我认为问题在于您尚未初始化 NSMutable 数组并将其分配到您正在创建的对象中。在创建对象之后,您需要在某处初始化和分配 NSMutableArray,然后再访问它。您可以在数据类 init 方法中初始化和分配数组,或者编写自定义方法并在创建数据对象后调用该自定义方法。

方法一:SourceData.m

@implementation SourceData

-(id) init
{
  self = [super init];

    if(self)
    {
       relImageURL = [[NSMutableArray alloc]init];
       [relImageURL addObject:@"FirstRow"];
    }

    return self;

}

在表视图控制器中

SourceData *sourceData = [[SourceData alloc]init];
tableData = [NSMutableArray arrayWithArray:[sourceData relImageURL]];
// tabledata is a private variable 

方法二:(Array的自定义init方法)

@implementation SourceData

-(void) initTableSource
{
     relImageURL = [[NSMutableArray alloc]init];
       [relImageURL addObject:@"FirstRow"];
}

在表视图控制器中

SourceData *sourceData = [[SourceData alloc]init];
[sourceData initTableSource];
NSLog(@"%@",[sourceData relImageURL])
于 2013-11-04T15:07:33.800 回答
0

使用 NSNotificationCenter 将数据发布到另一个类

于 2013-11-04T16:59:12.787 回答
0

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

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

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

如果您在如上所述请求之前实际上不添加任何元素,您如何设置表格视图的项目计数?

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

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

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

更新

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

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

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

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

..尝试这些方面的东西。再次强调两点:

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

...祝你好运...

于 2013-11-04T15:21:32.837 回答