0

私はシングルトン クラス 'ArrayManager' を作成しました。これは、他の多くのクラスから見えるようにしながら、消えてはならないデータを保持および保持するためだけに、その音のほとんどを実行します。NSMutableArray *cellArray は期待どおりに機能し、問題はありません。

便宜上、「MapProps」クラスへのポインタを「Array Manager」クラスに追加してみました。私の考えでは、ポインタを保持している限り問題はないはずですが、メインは目に見えるインターフェイスがないことを誓っています。

私はまだobjective-cに慣れていないので、順調に進んでいて、それは単なる構文エラーであるか、または完全にベースから外れている可能性があります。なぜこれが起こっているのかについてフィードバックをいただけますか? //MapProps.h
#import

@interface MapProps : NSObject{
    int pixelsX;
    int pixelsY;
    int tileSize;
    int rowsMax;
    int columnsMax;
};
@property int pixelsX,pixelsY,tileSize,rowsMax,columnsMax;
-(void)setPixelsX:(int)x andPixelsY:(int)y withTilesize:(int)tiles;
-(void)displayValues;
@end


//MapProps.m
@implementation MapProps
@synthesize pixelsX,pixelsY,tileSize,rowsMax,columnsMax;

-(void) setPixelsX:(int)x andPixelsY:(int)y withTilesize:(int)tiles {
    [self setPixelsX:x];
    [self setPixelsY:y];
    [self setTileSize:tiles];
    [self setRowsMax:(pixelsX/tileSize)];
    int yScalar = (.875 * tileSize);
    [self setColumnsMax:(pixelsY/yScalar)];
    [self displayValues];
};

-(void)displayValues {
    NSLog(@"PixelsX=%d PixelsY=%d ",pixelsX,pixelsY);
    NSLog(@"TileSize=%d",tileSize);
    NSLog(@"RowsMax=%d ColumnsMax=%d",rowsMax,columnsMax);
};
@end




//ArrayManager.h
#import <Foundation/Foundation.h>
@class MapProps; // include map properties

@interface ArrayManager : NSObject{
    NSMutableArray *cellArray;
    MapProps *mapProps; 
}
@property (nonatomic,retain) NSMutableArray *cellArray;
@property (nonatomic,retain) MapProps *mapProps;


+(id)sharedArrayManager;
-(void)setIntAtIndex:(int)index withValue:(int)value;
-(int)getIntAtIndex:(int)index;
@end


#import "ArrayManager.h"
#import "MapProps.h"

@implementation ArrayManager
@synthesize cellArray;
@synthesize mapProps;


+(id)sharedArrayManager{
    static id sharedArrayManager = nil;

    if (!sharedArrayManager){
        sharedArrayManager = [[self alloc]init];
    }
    return sharedArrayManager;
}

-(id)init{
    self = [super init];
    if (self){
        mapProps = [[MapProps alloc]init];
        cellArray=[[NSMutableArray alloc]init];

        for (int i=0; i <=600; i++) {
            [cellArray addObject:[NSNumber numberWithInt:i]];
        };

    }
    return self;
};

-(void)setIntAtIndex:(int)index withValue:(int)value{
    [cellArray replaceObjectAtIndex:index withObject:[NSNumber numberWithInt:value]];
};

-(int)getIntAtIndex:(int)index{
    return ([[cellArray objectAtIndex:index] intValue]);
};
@end




//Main
int main(int argc, const char * argv[])
{

    @autoreleasepool {
        int x;
        ArrayManager *arrayManager = [ArrayManager sharedArrayManager];

        [arrayManager.cellArray replaceObjectAtIndex:1 withObject:[NSNumber               numberWithInt:5]];
        x = [[arrayManager.cellArray objectAtIndex:1] intValue];
        NSLog(@"you got %d",x);

        [arrayManager setIntAtIndex:2 withValue:2];
        x = [arrayManager getIntAtIndex:2];

         NSLog(@"you got %d",x);

    [arrayManager setPixelsX:320 andPixelsY:480 withTilesize:16]; 

ここで、「目に見える@interfor ArrayManagerがありません....」というメッセージが表示されます。

    }
    return 0;
}

さて、はい、ここでやりたいことを行う他の方法があります。しかし、この場合、可能な限り最高のコードを理解し、作成したいと思います。

4

1 に答える 1

2

これは、クラス間の関係とは何の関係もありません。ArrayManager のヘッダー ファイルを main.m にインポートする必要があります。そうしないと、コンパイラがクラスの存在またはそれが定義するメソッドを認識しません。

于 2012-09-20T19:28:30.157 に答える