我正在制作一个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]; 我如何捕获转换的数据以便我可以使用它?
任何帮助将不胜感激。
答案 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}}
:遵循类和实例的命名约定。类的名称必须以大写字母开头,而对于任何类实例都必须相反。