-1

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

这大概是它的样子

存储类.h

// storageclass vars go here

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

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

任何帮助,将不胜感激。

4

2 回答 2

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

导入“用户.h”

    self.currentArray = [User usersFromArray:array];
于 2013-06-19T04:49:56.700 回答
1

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

如果你想要一个像你的代码显示的 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);
}

还要遵循类和实例的命名约定。类的名称必须仅以大写字母开头,任何类实例的名称都必须以大写字母开头。

于 2013-06-19T05:04:20.747 回答