0

他の 2 つのクラスでアクセスできるようにする必要があるデータを保持するモデルを作成しました。配列に追加しようとする前後の両方で配列をログに記録しようとしましselfたが、前後の両方で null です。考えられるすべてのことと、大量のグーグルを試しましたが、これを機能させることができません。データを保存するために作成したモデルは次のとおりです。

// CCModel.h

#import <Foundation/Foundation.h>
@interface CCModel : NSObject
// this is the array that I want to store my SKLetterNodes in
@property(strong, nonatomic) NSMutableArray* selectedLetters;
@end

// CCModel.m

#import "CCModel.h"

@implementation CCModel
- (id)init
{
    self = [super init];
    if (self) {
        // not really to sure if this is the right approach to init the array that I'm going to need
        self.selectedLetters = [NSMutableArray init];
    }
    return self;
}
@end

NSMutableArray にアクセスしようとしているクラスは次のとおりです

// SKLetterNode.h

#import <SpriteKit/SpriteKit.h>
#import "CCModel.h"

@class SKLetterNode;

@protocol LetterDragDelegateProtocol <NSObject>
-(void)letterNode:(SKLetterNode*)letterNode didDragToPoint:(CGPoint)pt;
@end

@protocol LetterWasTouchedDelegateProtocol <NSObject>
-(void) touchedPoint:(CGPoint)touchedPoint;
@end

@interface SKLetterNode : SKSpriteNode
// Here is where I'm creating a property to access my model's NSMutableArray
@property(strong, nonatomic) CCModel* model;

....
@end

// SKLetterNode.m - 他のすべてがこのクラスで機能するため、関連するメソッドのみを含めます

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    if (!self.isSelected) {

        SKLetterNode* lastLetter = [self.model.selectedLetters lastObject];

        if (lastLetter.bottomOrTop != self.bottomOrTop || self.model.selectedLetters.count == 0) {

            CGSize expandSize = CGSizeMake(self.size.width * expandFactor, self.size.height * expandFactor);

            SKAction* sound = [SKAction playSoundFileNamed:@"button.wav" waitForCompletion:NO];
            [self runAction:sound];

            self.isSelected = YES;
            self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:expandSize];
            self.physicsBody.affectedByGravity = NO;
            self.physicsBody.allowsRotation = NO;

            if (!self.model.selectedLetters) {
                // Here is where I'm trying to init my array by adding an object
                [self.model.selectedLetters arrayByAddingObject:self];
            } else {
                // The array must already be initialized, so add the object
                [self.model.selectedLetters addObject:self];
            }


        }

    }
}

if ブロックでわかるように、配列が初期化されていない場合は(!self.model.selectedLetters)、オブジェクトを追加して配列を初期化しようとしてselfいます。それ以外の場合は、オブジェクトを追加します。私はobjective-cを試していますが、まだ言語に慣れていないので、このプロセスには単純な何かがあり、理解をやめられないと確信しています。

4

3 に答える 3

1
self.selectedLetters = [NSMutableArray init];

次のようにする必要があります。

self.selectedLetters = [[NSMutableArray alloc] init];

そして、あなたもあなたのクラスのどこかにいる必要がありalloc initます。そうしないと、onが呼び出されることはありません。CCModelSKLetterNodealloc initselectedLetters

于 2013-10-30T01:10:34.800 に答える