访问由另一个类的frord声明添加的类属性

时间:2013-10-04 05:55:57

标签: ios

我有一个班级

@interface AppRecord : NSObject

  @property (nonatomic, retain) NSString * urlSingle;
  @property (nonatomic, retain) NSArray * image_url;

@end

它包含在另一个类

@class AppRecord;
@interface IconDownloader : NSObject

  @property (nonatomic, strong) AppRecord *appRecord;

@end

这是我的根视图控制器

#import "IconDownloader.h"
@implementation RootViewController
- (void)viewDidLoad
{
    [super viewDidLoad];

    self.imageDownloadsInProgress = [NSMutableDictionary dictionary];
}

- (void)startIconDownload:(AppRecord *)appRecord forIndexPath:(NSIndexPath *)indexPath
{
        IconDownloader *iconDownloader = [self.imageDownloadsInProgress objectForKey:indexPath];
if (iconDownloader == nil)
{
   iconDownloader = [[IconDownloader alloc] init];         
    int imgArrCount=[appRecord.image_url count];
    NSLog(@"Image array is********************** %@",appRecord.image_url);
    for(int i=0;i<imgArrCount;i++)
    {
        iconDownloader.appRecord.urlSingle=[appRecord.image_url objectAtIndex:i];
        NSLog(@"iconDownloader.appRecord.urlSingle---------------------%@",iconDownloader.appRecord.urlSingle);


    }
 }  
}   

@end

我可以在这里指定iconDownloader.appRecord.urlSingle,我有空值。请帮忙。

2 个答案:

答案 0 :(得分:0)

这与前方声明无关。当您转发声明一个类时,在使用任何类属性/方法之前,您应该#import .h文件。

问题是appRecord中的属性iconDownloader尚未创建,因此为nil。在您的代码中,您应该这样做。

- (void)startIconDownload:(AppRecord *)appRecord forIndexPath:(NSIndexPath *)indexPath

    //...

    for(int i=0;i<imgArrCount;i++)
    {
        // First assign to the property so that it is not nil
        iconDownloader.appRecord = appRecord;
        // If required then make this assignment
        iconDownloader.appRecord.urlSingle=[appRecord.image_url objectAtIndex:i];
    }

    //...
}

或者,您也可以覆盖init类中的IconDownloader并在其中创建appRecord属性,以便在分配值时不是nil

希望有所帮助!

答案 1 :(得分:0)

您没有初始化 appRecord 对象。这就是为什么你得到空值。只需在 init 方法中初始化 appRecord ,例如:

-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {

        appRecord = [[AppRecord alloc]init];
    }
    return self;
}

同样,您必须在init定义中初始化 urlSingle 变量:

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

            urlSingle = URL_STRING_HERE;
        }
        return self;
    }

现在你试试