2012-04-13 13 views
0

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

"maindata.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 

"maindata.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 
+1

Ruはいずれかを取得を書くことができ、比較が、割り当てないラインに注目してくださいエラー。?!あなたはどんな問題があるのか​​、何が欲しいのですか? maindictはNSDictionaryです。しかし、initメソッドでは、NSMutableDictionaryを使ってそれを割り当てています。 –

+0

1つの有効なクラスを作成しようとしていることを確認してください。それを参照してください。助けてほしいという希望... – Jim

+1

クラス名は常に 'UpperCamelCase'にあるべきです。これがコンベンションであり、Cocoaフレームワークはこれらの規約に時々依存しています。 – dreamlax

答えて

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. 
} 
1

ここで作成したものは、シングルトンオブジェクトのようです。あなたがintetionallyそれをした場合、それはいいです。しかし、通常はオブジェクトを初期化するには、静的な共有のものを使わずにちょうど-(id)initメソッドを使うべきです。

だから、基本的にジムの答えに従ってください。

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

が、それはコンパイラの警告を回避するために、代わりにこの

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

ようになっているはずですので、あなたが

-(id)init 
{ 
    self=[super init]; 
    if(self){} 
} 
関連する問題