0

私は Xcode を初めて使用し、配列と辞書を使用してクラスを作成しようとしています。オブジェクトを正しく初期化する方法がわかりません。私は何を間違っていますか?

「メインデータ.h」

#import <Foundation/Foundation.h>

@interface maindata : NSDictionary
{
    NSDictionary *maindict;
    NSArray      *arrayofallmethods;
    NSArray      *categories;
    NSArray      *methods;
}

@property(nonatomic,retain) NSDictionary *maindict;
@property(nonatomic,retain) NSArray      *categories;
@property(nonatomic,retain) NSArray      *methods;
@property(nonatomic,retain) NSString     *pathtoplist;


+(maindata *) shareddata;

@end

「メインデータ.m」

#import "maindata.h"

@implementation maindata

@synthesize maindict;
@synthesize methods;
@synthesize categories;
@synthesize pathtoplist;

static maindata *shareddata_;

-(id)init
{
    if(self == [super init])
    {
        pathtoplist = [[NSBundle mainBundle] pathForResource:@"allData" ofType:@"plist"];
        shareddata_.maindict = [NSMutableDictionary dictionaryWithContentsOfFile:pathtoplist];
        shareddata_.methods = [maindict allValues];
    }

    return shareddata_;
}

+(maindata *) shareddata
{
    if (!shareddata_)
    {
        shareddata_ = [[maindata alloc] init];
    }

    return shareddata_;
}

@end
4

2 に答える 2

1

ここで作成したものはシングルトン オブジェクトのようです。わざとやったのならそれでいい。ただし、通常、オブジェクトを初期化するには、-(id)init静的な共有要素を使用せずにメソッドのみを使用する必要があります。

したがって、基本的にはジムの答えに従う必要があります。行に注意してください

-(id)init
{
    if(self == [super init]){}
}

は比較ではなく割り当てなので、次のようになります

-(id)init
{
    if(self = [super init]){}
}

または、コンパイラの警告を回避するために、次のように書くことができます

-(id)init
{
    self=[super init];
    if(self){}
}
于 2012-04-13T11:07:24.173 に答える
0
//maindata.h
#import <Foundation/Foundation.h>
@interface maindata : NSObject{
         NSDictionary *maindict;
         NSArray      *arrayofallmethods;
         NSArray      *categories;
         NSArray      *methods;
}
@property(nonatomic,retain) NSDictionary *maindict; 
@property(nonatomic,retain) NSArray *categories;
@property(nonatomic,retain) NSArray *methods;
@property(nonatomic,retain) NSArray * arrayofallmethods;
@end


//"maindata.m"

import "maindata.h"
@implementation maindata
@synthesize maindict;
@synthesize methods;
@synthesize categories;
@synthesize arrayofallmethods;

-(id)init {
      if(self = [super init]){
          NSString *pathtoplist = [[NSBundle mainBundle] pathForResource:@"allData" ofType:@"plist"];
          maindict = [NSMutableDictionary dictionaryWithContentsOfFile:pathtoplist];
          methods = [maindict allValues];
    }
    return self;
 }
@end

そして、他のクラスからmaindataクラスのオブジェクトを初期化して作成しようとします

#import <UIKit/UIKit.h>
#import "maindata.h"

int main(int argc, char *argv[]) {
     maindata *objMainData = [[maindata alloc]init];
     // use object here for more operations on your data.
}
于 2012-04-13T11:00:36.397 に答える