2

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

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

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

我的问题是:

  1. 为什么它显示为空?
  2. _arrayOfPathsB级怎么进?
  3. 我需要使用继承吗?B 已经在继承 UITableViewController.
  4. 目标c是否支持多重继承?
4

5 回答 5

6

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

2.第二个问题见此代码....

类A.h

@interface ClassA:UIViewController

@property (nonatomic, retain) NSMutableArray *arrayOfPaths;

@end

类A.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

B类.h

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

@property (nonatomic, copy) ClassA *aReference;

@end

B类.m

@implementation ClassB

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

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

3.您需要使用代表概念来实现您的要求。见上面的示例代码

4.objective -c 不支持多重继承。

于 2013-03-28T10:20:18.307 回答
1
  1. 它显示 null (可能)因为 arrayOfPaths 尚未初始化。
  2. arrayOfPaths创建一个在 A 类的头文件中调用的公共属性

在 A 的 .h 文件中:

@property (nonatomic, strong) NSMutableArray *arrayOfPaths;

在 A 的 .m 文件中:

-(id)init {
    self = [super init];
    if(self) {
        self.arrayOfPaths = [[NSMutableArray alloc] init];
    }
    return self;
}
于 2013-03-28T10:01:35.257 回答
0

您可以使用单例类来共享数据检查这个单例类

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]
于 2013-03-28T10:01:00.967 回答
0

希望您从 A 类推送 B 视图控制器。创建一个属性并在推送之前执行此操作

//分配B对象和数组 objBViewController.arra =self.arr; //推视图控制器

目标不支持多重继承,但我们通过制作协议/委托来实现这一点。谷歌它或阅读这个链接

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

于 2013-03-28T10:13:52.607 回答
0

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

类A.h

 @interface ClassA

    @property (nonatomic, strong) NSMutableArray *arrayInClassA;

    @end

类A.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

B类.h

@interface ClassB:UITableViewController

@property (nonatomic,strong) NSMutableArray arrayInClassB;

@end

B类.m

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

-(void)viewDidLoad
{
self.arrayInClassB = [ClassA returnArrayInClassA];
}
@end
于 2014-07-19T05:53:25.087 回答