我有2个班,比如A和B. 我现在在A类中有一个可变数组_arrayOfPaths我试图在类b中访问该数组。 如下所示:
A *testModel = [[A alloc]init];
NSMutableArray *array = [testModel.arrayOfPaths mutableCopy];
现在当我NSLog
这个新制造的数组时,它显示为null。
如果我打印testModel.arrayOfPaths
,那么它也会显示为空。
我的问题是:
_arrayOfPaths
?UITableViewController
。答案 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)
arrayOfPaths
的公共属性
在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来实现这一点。谷歌或阅读此链接
答案 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