在制作我的第一个应用程序时,我真的陷入了一个小问题,在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
我在我的代码中有init和调用函数和类,上面是我正在做的事情,但这就是我所处的情况。
任何帮助将不胜感激
----真正的InCode尝试了解我所读的评论-----
数据源类
表视图类
答案 0 :(得分:0)
请在链接https://github.com/slysid/iOS/tree/master/Tableview中查看项目。我模拟了你需要的东西。我有一个数据源填充在一个外部对象中,用于填充tableview。
我认为问题是你没有初始化你的NSMutable数组并将它分配给你正在创建的对象。在访问它之前,您需要在创建对象之后使用NSMutableArray init和alloc。您可以在数据类init方法中初始化和分配数组,或者编写自定义方法,并在创建数据对象后调用该自定义方法。
方法1: SourceData.m
@implementation SourceData
-(id) init
{
self = [super init];
if(self)
{
relImageURL = [[NSMutableArray alloc]init];
[relImageURL addObject:@"FirstRow"];
}
return self;
}
在tableviewcontroller中
SourceData *sourceData = [[SourceData alloc]init];
tableData = [NSMutableArray arrayWithArray:[sourceData relImageURL]];
// tabledata is a private variable
方法2 :(数组的自定义初始化方法)
@implementation SourceData
-(void) initTableSource
{
relImageURL = [[NSMutableArray alloc]init];
[relImageURL addObject:@"FirstRow"];
}
在tableviewcontroller中
SourceData *sourceData = [[SourceData alloc]init];
[sourceData initTableSource];
NSLog(@"%@",[sourceData relImageURL])
答案 1 :(得分:0)
首先,除非你正在对你的实例变量(relImageUrl)做一些特别的事情,否则它就不需要了。如果你保留它,请确保你正确地合成它 - 当前的约定是在它前面添加一个下划线(如_relImageUrl)。但同样,你可能根本不需要它。
你没有为relImageUrl展示任何getter / setter,所以假设你没有做任何特别的事情。
您还将您的私有类接口显示为GDAPIhandler,但您将其称为dataClass.h - 这没有任何意义。
如果您在上面请求之前没有实际添加任何元素,如何设置表格视图的项目数?
理想情况下,您的自定义类中有一个NSArray属性,并通过公开来对其进行操作:
所有这些假设您正在尝试使用自定义类来“隐藏”对底层数组的访问。建议你按照这些方法进行重构,以便让自己更容易前进。
更新
我刚看到你的屏幕截图为最后一次回复。当您不共享所有相关信息时,不确定您希望人们如何提供帮助。
如果要在块内分配relImageUrl,则需要在其前面添加__block存储修饰符。此外,不要在块内部引用self,因为它可能导致保留周期。
所以,你可以尝试类似的东西(在你的函数内但在你输入任何块之前)。
__weak CustomClass* weakSelf = self; // don't capture self in block
__block NSMutableArray* weakImageUrl = weakSelf.relImageUrl;
..尝试这些方面的东西。再两个要点:
...祝你好运......
答案 2 :(得分:0)
使用NSNotificationCenter将数据发布到另一个类