如何存储返回self的类对象

时间:2013-06-19 04:43:01

标签: ios objective-c nsobject

我正在制作一个NSObjectClass,其中有一个返回self的方法。

这就是它看起来像是什么

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来返回一个类型为storageclass的对象,然后我可以使用点表示法来访问变量。

这就是我现在尝试访问此课程的方式

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]; 我如何捕获转换的数据以便我可以使用它?

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分: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 :(得分:1)

store对象永远不会被初始化,所以nil明显不是它。(storageclass)assignData:(NSDictionary *)dictionary。首先初始化store对象,然后将其实例方法调用到它上面。通过这样做,您将拥有一个已经正确分配了一些字典的storageclass对象。

如果你想拥有一个像你的代码所示的存储类对象,你应该通过设置+符号

来使你的+(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);
}

然后在视图控制器中使用此类方法

{{1}}

:遵循类和实例的命名约定。类的名称必须以大写字母开头,而对于任何类实例都必须相反。