これは私の最初の投稿です。
カスタム オブジェクトの配列を NSuserDefauls を介して Today 拡張機能と共有しようとしています。
カスタム オブジェクトを NSUserdefaults に配置できないことはわかっているので、NSKeyedArchiver - NSKeyedUnarchiver でコーディングして NSData に変換しました。
これは私のカスタムクラスです
#import "Counter.h"
@implementation Counter
@dynamic city;
@dynamic address;
@dynamic event;
@dynamic date;
@dynamic time;
@dynamic counter;
@dynamic latitude;
@dynamic longitude;
- (void)encodeWithCoder:(NSCoder *)encoder
{
//Encode properties, other class variables, etc
[encoder encodeObject:self.city forKey:@"city"];
[encoder encodeObject:self.address forKey:@"address"];
[encoder encodeObject:self.event forKey:@"event"];
[encoder encodeObject:self.date forKey:@"date"];
[encoder encodeObject:self.time forKey:@"time"];
[encoder encodeObject:self.counter forKey:@"counter"];
[encoder encodeObject:self.latitude forKey:@"latitude"];
[encoder encodeObject:self.longitude forKey:@"longitude"];
}
- (id)initWithCoder:(NSCoder *)decoder
{
self = [super init];
if( self != nil )
{
self.city = [decoder decodeObjectForKey:@"city"];
self.address = [decoder decodeObjectForKey:@"address"];
self.event = [decoder decodeObjectForKey:@"event"];
self.date = [decoder decodeObjectForKey:@"date"];
self.time = [decoder decodeObjectForKey:@"time"];
self.counter = [decoder decodeObjectForKey:@"counter"];
self.latitude = [decoder decodeObjectForKey:@"latitude"];
self.longitude = [decoder decodeObjectForKey:@"longitude"] ;
}
return self;
}
@end
アプリ内のコーディング機能です。
- (void)saveInUserDefault {
//Counter is my Custom class
//I'm Using MagicalRecord
NSArray *array = [Counter MR_findAllSortedBy:@"date" ascending:NO];
NSMutableArray *defaultMutableArray = [NSMutableArray arrayWithCapacity:array.count];
NSUserDefaults *defaultArray = [[NSUserDefaults alloc] initWithSuiteName:@"group.LorenzoLoRe.Everycount"];
for (Counter *cnt in array) {
NSData *dataToDefault = [NSKeyedArchiver archivedDataWithRootObject:cnt];
[defaultMutableArray addObject:dataToDefault];
}
[defaultArray setObject:defaultMutableArray forKey:@"counts"];
[defaultArray synchronize];
}
この時点でログを見ると、データは NSUserDefaults に書き込まれているようです
そしてここで、拡張機能のデータを取得しようとしています
-
(void)takeLastCounts {
NSUserDefaults *defaultArray = [[NSUserDefaults alloc] initWithSuiteName:@"group.company.product"];
[defaultArray synchronize];
NSArray *dummyArray = [defaultArray arrayForKey:@"counts"];;
NSMutableArray *arrayFromDefault= NULL;
Counter *cter = nil;
for (NSData *data in dummyArray) {
cter = [NSKeyedUnarchiver unarchiveObjectWithData:data];
[arrayFromDefault addObject:cter];
}
self.cnt_1 = arrayFromDefault[0];
self.cnt_2 = arrayFromDefault[1];
NSDateFormatter * formatter = [[NSDateFormatter alloc] init];
[formatter setDateStyle:NSDateFormatterShortStyle];
self.eventLabel.text = self.cnt_1.event;
self.dateLabel.text = [formatter stringFromDate:self.cnt_1.date];
self.counterLabel.text = self.cnt_1.counter.stringValue;
self.timeLabel.text = self.cnt_1.time;
}
拡張機能を実行しようとすると、エラーは表示されず、空の配列だけが表示されます。特にNSArray *dummyArray = [defaultArray arrayForKey:@"counts"];
空っぽいので、どこかデータが流れていません。
私が間違っていることは何ですか??
あらゆる種類のヒントをいただければ幸いです。