2

AとBの2つのクラスがあります。Aクラスに可変配列_arrayOfPathsがあり、クラスbでその配列にアクセスしようとしています。以下のように:

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

NSLogこの新しく作成した配列を表示すると、null が表示されます。印刷testModel.arrayOfPathsすると、nullも表示されます。

私の質問は次のとおりです。

  1. null が表示されるのはなぜですか?
  2. _arrayOfPathsBクラスのアクセス方法を教えてください。
  3. 継承を使用する必要がありますか?B はすでに を継承してい UITableViewControllerます。
  4. 多重継承は目的 c でサポートされていますか?
4

5 に答える 5

6

1. ここでは、A の既存のインスタンスにアクセスして B インスタンス内の配列をフェッチする代わりに、単純に A の新しいインスタンスを作成しています。それだけがnull値を示しているように。

2. 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. 目的 -c は多重継承をサポートしません。

于 2013-03-28T10:20:18.307 に答える
1
  1. arrayOfPaths がまだ初期化されていないため、(おそらく) null が表示されます。
  2. arrayOfPathsクラス A のヘッダー ファイルで呼び出されるパブリック プロパティを作成します。
  3. いいえ
  4. いいえ

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

AクラスからBビューコントローラーをプッシュしていることを願っています。プロパティを作成し、プッシュする前にこれを行います

//allocation B oject と配列 objBViewController.arra =self.arr; //プッシュビューコントローラー

目的は多重継承をサポートしていませんが、プロトコル/デリゲートを作成することでこれを実現しています。Googleで検索するか、このリンクを読んでください

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

于 2013-03-28T10:13:52.607 に答える
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 に答える