访问另一个类中的属性

时间:2013-03-28 09:52:35

标签: ios

我有2个班,比如A和B. 我现在在A类中有一个可变数组_arrayOfPaths我试图在类b中访问该数组。 如下所示:

A *testModel = [[A alloc]init];
 NSMutableArray *array = [testModel.arrayOfPaths mutableCopy];

现在当我NSLog这个新制造的数组时,它显示为null。 如果我打印testModel.arrayOfPaths,那么它也会显示为空。

我的问题是:

  1. 为什么显示null?
  2. 如何在B类中访问_arrayOfPaths
  3. 我需要使用继承吗? B已经继承了 UITableViewController
  4. 目标c支持多重继承吗?

5 个答案:

答案 0 :(得分:5)

<强> 1。在这里,您只是创建一个新的A实例,而不是访问现有的A实例来获取B实例中的数组。所以只有它显示空值。

<强> 2。请参阅此代码以获取第二个问题....

<强> ClassA.h

@interface ClassA:UIViewController

@property (nonatomic, retain) NSMutableArray *arrayOfPaths;

@end

<强> ClassA.m

@implementation ClassA

@synthesize arrayOfPaths = _arrayOfPaths;

    -(id)init
    {
       self = [super init];
       if(self)
       {
        self.arrayOfPaths = [[NSMutableArray alloc] initWithObjects:@"1",@"2", nil];

        //Delegation process
        ClassB *bInstance = [[ClassB alloc] init];
        [bInstance setAReference:self];

        //Do your stuff of presenting ClassB instance here.....
       }
}
@end

<强> ClassB.h

#import "ClassA.h"
@interface ClassB:UITableViewController

@property (nonatomic, copy) ClassA *aReference;

@end

<强> ClassB.m

@implementation ClassB

@synthesize aReference = _aReference;
-(void)viewDidLoad
{
    NSLog(@"Array from class ClassA %@", self.aReference.arrayOfPaths);
}
@end

ClassB ViewController只能在这里由ClassA实例化。

第3。您需要使用委托概念来实现您的要求。请参阅上面的示例代码

<强> 4。 objective -c不支持多重继承。

答案 1 :(得分:1)

  1. 它显示为null(可能)因为arrayOfPaths尚未初始化。
  2. 在A类的头文件
  3. 中创建一个名为arrayOfPaths的公共属性
  4. 没有
  5. 没有
  6. 在A的.h文件中:

    @property (nonatomic, strong) NSMutableArray *arrayOfPaths;
    

    在A的.m文件中:

    -(id)init {
        self = [super init];
        if(self) {
            self.arrayOfPaths = [[NSMutableArray alloc] init];
        }
        return self;
    }
    

答案 2 :(得分:0)

您可以使用singleton类来共享数据 检查这个Singleton类

MyManger.h

 #import <foundation/Foundation.h>

 @interface MyManager : NSObject

 @property (nonatomic, retain) NSMutableArray * array;

 + (id)sharedManager;  

 @end 

MyManger.m

 #import "MyManager.h"

 static MyManager *sharedMyManager = nil;

 @implementation MyManager



 #pragma mark Singleton Methods  

 + (id)sharedManager {
   @synchronized(self) {
    if(sharedMyManager == nil)
     sharedMyManager = [[super allocWithZone:NULL] init];
   }
  return sharedMyManager;
 } 

 - (id)init {
   if (self = [super init]) {
   array = [[NSMutableArray alloc] init];
   }
 return self;
 }   

您可以像这样从

访问您的阵列
 MyManager * sharedArray = [MyManager sharedManager]

 [sharedArray array]

答案 3 :(得分:0)

希望你从A类推动B视图控制器。在推送之前制作一个属性

//分配对象和数组 objBViewController.arra = self.arr; // pushview控制器

目标不支持多重继承,但我们通过制定Protocols / Delgates来实现这一点。谷歌或阅读此链接

http://support.apple.com/kb/TA45894

答案 4 :(得分:0)

我会回答你的问题#2。 您可以通过类方法访问该属性。

<强> ClassA.h

 @interface ClassA

    @property (nonatomic, strong) NSMutableArray *arrayInClassA;

    @end

<强> ClassA.m

import "ClassA.h"

NSMutableArray *array1;

@implementation ClassA

@synthesize arrayInClass A = _arrayInClassA;

-(void)viewDidLoad
{
    self.arrayInClassA = [[NSMutableArray alloc] initWithObjects: nil];
    array1 = self.arrayInClassA;
}
+(id)returnArrayInClassA
{
return array1;
@end

<强> ClassB.h

@interface ClassB:UITableViewController

@property (nonatomic,strong) NSMutableArray arrayInClassB;

@end

<强> ClassB.m

import "ClassB.h"
import "classA.h"
@implementation ClassB

-(void)viewDidLoad
{
self.arrayInClassB = [ClassA returnArrayInClassA];
}
@end