2013-06-19 21 views
-1

我正在做一個NSObjectClass,它有一個返回self的方法。如何存儲返回自我的classobject

這是什麼樣子roughtly

storageclass.h

// storageclass vars go here 

- (storageclass)assignData:(NSDictionary *)dictionary; 

storageclass.m

//@synthesise everything 

- (storageclass)assignData:(NSDictionary *)dictionary { 

//assign values from dictionary to correct var types (i.e. NSString, Int, BOOL) 
//example 
Side = [dictionary valueForKey:@"Side"]; 
return self; 

} 

那我想做的是通過使用這個類通過它的方法傳遞一個NSDictionary var來返回一個我能夠存儲類的對象用於使用點符號訪問變量。

這就是我正在嘗試在目前

accessorViewController.h

storageclass *store; 

@property (strong, nonatomic) storageclass *store; 

accessorViewController.m訪問該類

@synthesize store; 

- (void)getstoreready { 

[store assignData:someDictionary]; 

nslog(@"%@", store); 

} 

此的NSLog返回任何內容並在調試器中,所有商店類的變量都是空的,沒有任何顯示被分配。我100%肯定在assignData方法中使用的字典變量具有正確的valueForKey值。

我認爲這跟我在這裏如何使用它有關係[store assignData:someDictionary];我如何捕捉轉身的數據,以便我可以使用它?

任何幫助,將不勝感激。

+0

好吧我現在就試試這個,讓你知道我是如何去的。但是在我初始化它之後重申,我稱它爲** [store assignData:someDictionary] **,然後存儲將具有值的可用性? – HurkNburkS

+0

是的,我解釋了它在回答中好一點 – Zen

回答

1

store對象永遠不會初始化,所以這將是nil這就是明顯的是吧。首先初始化商店對象,然後調用它的實例方法。通過這樣做,您將擁有一個已經正確分配了某個字典的存儲類對象。

如果你想有一個像你的代碼展示了一個storageclass對象,你應該讓你的(storageclass)assignData:(NSDictionary *)dictionary方法的類的方法,而不是通過把一個+標誌

+(storageclass*)assignData:(NSDictionary *)dictionary; 

然後正確初始化,並分配一個實例方法數據(字典到變量)相應地返回給調用者。例如: - 在.m文件

+(storageclass*)assignData:(NSDictionary *)dictionary{ 
     storageclass *test = [[storageclass alloc] init]; 
     if (test) { 
      test.someDict = dictionary; 
     } 
    return test; 
} 

然後使用此類方法在您的視圖控制器

- (void)getstoreready { 
    store = [storageClass assignData:someDictionary]; 
    nslog(@"%@", store); 
} 

此外做好後續類和實例的命名約定。一個類的名字必須以大寫字母開頭,任何類實例都必須使用相反的字母。

+0

好吧我已經完成了你已經概述的事情,但是我得到了我的storageClass中的變量錯誤**實例變量' manu'在班級方法中訪問** – HurkNburkS

+0

@HurkNburkS你在班級方法聲明中做了什麼?我編輯了類方法聲明。 – Zen

+0

我擺脫了那個實例var問題,我錯過了你使用的地方** test.someDict **我錯過了類名**測試**我沒有看起來很像你上面如何得到exatly我怎麼越來越一個錯誤**不能初始化一個類對象**我想知道** store **來自您的方法getstoreready .. – HurkNburkS

1
In User.h 

    @interface User : NSObject 

    @property (nonatomic, copy) NSString *name; 

    - (id)initWithDictionary:(NSDictionary *)dictionary; 

    + (NSArray *)usersFromArray:(NSArray *)array; 

    @end 

In User.m 
    - (id)initWithDictionary:(NSDictionary *)dictionary 
    { 
     self = [super init]; 
     if (self) { 
      if (dictionary) 
      { 
       self.name = dictionary[@"kUserName"]; 
      } 
     } 
      return self; 
    } 

    + (NSArray *)usersFromArray:(NSArray *)array 
    { 
     NSMutableArray *users = [NSMutableArray array]; 
     for (NSDictionary *dict in array) { 
      User *user = [[User alloc]initWithDictionary:dict]; 
      [users addObject:user]; 
     } 
     NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"name" 
                    ascending:YES]; 
     return [users sortedArrayUsingDescriptors:@[descriptor]]; 
    } 

In ViewController.m 

進口 「User.h」

self.currentArray = [User usersFromArray:array]; 
+1

是的,這似乎是正確的方式... –