当用户按下登录时,我正在使用Restkit返回一堆对象。我需要将这些不同的对象和属性存储在自定义的NSObject中,以便在整个应用程序中进行参考。
我不是Objc的天才,这就是为什么我需要一个例子并解释我做错了什么。 SO没有自定义NSObjects的任何示例,这就是我在这里问的原因。
在此先感谢,我一定会接受正确答案。
在loginViewController中我有这个在自定义NSObject中设置数组:
Crap *crapper = [[Crap alloc] init];
[crapper setCrapArray:array];
这是Crap.h:
#import <Foundation/Foundation.h>
@interface Crap : NSObject <NSCoding>
@property (nonatomic, retain) NSArray *crapArray;
- (void)encodeWithCoder:(NSCoder *)enCoder;
- (id)initWithCoder:(NSCoder *)aDecoder;
@end
和Crap.m:
#import "Crap.h"
@implementation Crap
@synthesize crapArray;
- (void)encodeWithCoder:(NSCoder *)encoder {
//Encode properties, other class variables, etc
[encoder encodeObject:self.crapArray forKey:@"crapArray"];
}
- (id)initWithCoder:(NSCoder *)decoder {
if((self = [super init])) {
//decode properties, other class vars
self.crapArray = [decoder decodeObjectForKey:@"crapArray"];
}
return self;
}
@end
我正在使用它来检索FeedViewController中的数据:
Crap *crap = [[Crap alloc] init];
NSLog(@"%d", crap.crapArray.count);
当然是0(数组计数真的是40个)。
答案 0 :(得分:2)
您的标题Crap文件应为
#import <Foundation/Foundation.h>
@interface Crap : NSObject <NSCoding>
@property (nonatomic, retain) NSArray *crapArray;
+ (Crap *) crap;
- (void)encodeWithCoder:(NSCoder *)enCoder;
- (id)initWithCoder:(NSCoder *)aDecoder;
@end
你的实现Crap文件应该是
#import "Crap.h"
@implementation Crap
@synthesize crapArray;
+ (Crap *) crap {
static Crap *crap = nil;
if (!crap) {
crap = [[super allocWithZone:nil] init];
}
return crap;
}
+ (id) allocWithZone:(struct _NSZone *)zone {
return [self crap];
}
- (id) init {
self = [super init];
if (self) {
// set default property values
crapArray = nil;
}
return self;
}
- (void)encodeWithCoder:(NSCoder *)encoder {
//Encode properties, other class variables, etc
[encoder encodeObject:self.crapArray forKey:@"crapArray"];
}
- (id)initWithCoder:(NSCoder *)decoder {
if((self = [super init])) {
//decode properties, other class vars
self.crapArray = [decoder decodeObjectForKey:@"crapArray"];
}
return self;
}
@end
然后设置你要做的事情,比如
[Crap crap].crapArray = [NSArray arrayWithObjects:@"Hello", @"Bye", nil];
要从另一个视图控制器获取该值,您必须执行类似
的操作NSLog(@"Value: %d", [[Crap crap] crapArray].count);
如果你这样做
Crap *crap = [[Crap alloc] init];
NSLog(@"%d", crap.crapArray.count);
crapArray将被设置为nil并且你将再次获得0,因为我们在init方法上将crapArray设置为nil。
答案 1 :(得分:0)
startObject.h
#import <Foundation/Foundation.h>
@interface startObject : NSObject
@property (nonatomic, retain) NSArray *crapArray;
@end
startObject.m
@implementation startObject
@synthesize crapArray;
- (id)init {
self = [super init];
return self;
}
@end
使用:
startObject* start = [[startObject alloc] init];
start.crapArray = [NSArray arrayWithObjects:@"Alpha", @"Beta", @"Gamma", @"Omega", nil];
NSLog(@"%@",start.crapArray);
结果:
(
Alpha,
Beta,
Gamma,
Omega
)
上面的代码用于将数据保存到NSObject。而已。
要发布它的内容,只需设置start = nil
。
但是,如果您希望使用存档将数据保存到磁盘,请告诉我们。另请查看here以获取有关使用NSCoding
的详细教程。