簡體   English   中英

將數據存儲在自定義類的NSArray中,並在其他類/控制器中使用

[英]Store data in NSArray in custom class and use in other class/controller

在制作我的第一個應用程序時,我確實陷入了一個小問題,嘗試過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並調用了函數和類,例如,上面是我正在做的事情,但這就是我所處的情況。
任何幫助,將不勝感激

----嘗試理解閱讀注釋后的Real InCode -----
數據源類

數據源類

表格視圖類

我要在其中使用數組的Table視圖類,我已經包含了數據源類

請檢查鏈接https://github.com/slysid/iOS/tree/master/Tableview中的項目。 我模擬了您的需求。 我在外部對象中填充了數據源,該外部對象用於填充tableview。

我認為問題是您尚未初始化NSMutable數組,而是將其分配到正在創建的對象中。 在創建對象之后,需要先將NSMutableArray初始化並分配在某個位置,然后才能訪問它。 您可以在數據類的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 :(數組的自定義init方法)

@implementation SourceData

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

在tableviewController中

SourceData *sourceData = [[SourceData alloc]init];
[sourceData initTableSource];
NSLog(@"%@",[sourceData relImageURL])

首先,除非您對實例變量(relImageUrl)做一些特殊的操作,否則請不要使用它。 如果保留它,請確保正確合成它-當前的約定是在其下划線加一個下划線(如_relImageUrl中所示)。 但是同樣,您可能根本不需要它。

您尚未顯示relImageUrl的getter / setter方法,因此假設您在此處未進行任何特殊操作。

您還將私有類接口顯示為GDAPIhandler,但將其稱為dataClass.h-這沒有任何意義。

如果您沒有真正添加任何元素,直到您如上所述要求時,如何設置表視圖的項目計數?

理想情況下,您可以在自定義類中擁有一個NSArray屬性,並通過以下方法對其進行操作:

  1. 一種獲取項目數的方法
  2. 一種提取給定索引的項目的方法
  3. 可能的添加/刪除項目的方法
  4. 實例化/填充數組的方法-但請不要像看起來在做的那樣在請求單元格時這樣做.....這種方法不能很好地結束

所有這些都假定您正在嘗試使用自定義類來“隱藏”對基礎數組的訪問。 建議您按照其中一些思路進行重構,以使自己的工作更輕松。

UPDATE

我剛剛看到了您的屏幕快照,以作最后反應。 不知道當您不共享所有相關信息時,您希望人們如何幫助。

如果要在塊內分配relImageUrl,則需要在其前面加上__block storage修飾符。 此外,不要在塊內部引用self,因為它可能導致保留周期。

因此,您可以嘗試類似的操作(在函數內部,但在輸入任何塊之前)。

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

..按照這些思路嘗試一些事情。 再有兩個要點:

  1. 不要在塊內引用自己
  2. 對需要在塊內進行變異的任何對象使用__block storage修飾符

...祝好運...

使用NSNotificationCenter將數據發布到另一個類

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM