У меня есть класс под названием CurrentUser
, который содержит NSMutableArray
под названием listOfFriends
. В этом listOfFriends
хранятся объекты класса Friends
.Проблемы с сохранением NSMutableArray с настраиваемыми объектами
Оба класса CurrentUser
и Friend
имеют протоколы NSCoding
. Объект Friend
имеет свойство под названием userImg
, которое является UIImage
. Есть только одна проблема. Когда я пытаюсь загрузить lisOfFriends
, Друзья не входят с их UIImages
.
Если я сохраню друга и попробую загрузить его снова, он поставляется с UIImage
без проблем. Но если объект находится внутри listOfFriends
, он не поставляется с UIImage
, но все остальные данные загружаются правильно.
Мой вопрос тогда: Как я могу хранить и загружать NSMutableArray
с помощью пользовательских объектов? Декларация список друзей:
CurrentUser.h
@property (nonatomic,strong)NSMutableArray *FriendsList;
CurrentUser.m
- (void) encodeWithCoder:(NSCoder *)encoder {
[encoder encodeObject:username forKey:@"username"];
[encoder encodeObject:FriendsList forKey:@"FriendsList"];
//testing direct friend saving
[encoder encodeObject:[FriendsList objectAtIndex:0] forKey:@"testFriend"];
[encoder encodeObject:_userPSW forKey:@"userpassword"];
[encoder encodeObject:UIImagePNGRepresentation(userImg) forKey:@"userImg"];
[encoder encodeObject:userID forKey:@"userID"];
[encoder encodeObject:groups forKey:@"groups"];
[encoder encodeObject:_email forKey:@"email"];
}
- (id)initWithCoder:(NSCoder *)decoder {
currentUser *returnUser = [[currentUser alloc] init];
returnUser.username = [decoder decodeObjectForKey:@"username"];
returnUser.email = [decoder decodeObjectForKey:@"email"];
//testing direct friend loading
Friend *testFriend = [decoder decodeObjectForKey:@"testFriend"];
returnUser.userPSW = [decoder decodeObjectForKey:@"userpassword"];
returnUser.userImg = [UIImage imageWithData:[decoder decodeObjectForKey:@"userImg"]];
returnUser.FriendsList = [decoder decodeObjectForKey:@"FriendsList"];
returnUser.userID = [decoder decodeObjectForKey:@"userID"];
returnUser.groups = [decoder decodeObjectForKey:@"groups"];
return returnUser;
}
Friend.m
- (void)encodeWithCoder:(NSCoder *)encoder{
[encoder encodeObject:UIImagePNGRepresentation(userImg) forKey:@"friendIMG"];
[encoder encodeObject:username forKey:@"friendUN"];
[encoder encodeObject:userID forKey:@"friendID"];
}
- (id)initWithCoder:(NSCoder *)decoder{
Friend *obj = [[Friend alloc]init];
obj.username = [decoder decodeObjectForKey:@"friendUN"];
obj.userImg = [UIImage imageWithData:[decoder decodeObjectForKey:@"friendIMG"]];
obj.userID = [decoder decodeObjectForKey:@"friendID"];
return obj;
}
Это объект, который я должен сохранить и загрузить CurrentUser. Он называется «Конфигурации». Configurations.h
#import "currentUser.h"
@interface configurations : NSObject
- (currentUser*)loadCustomObject;
- (void)saveCustomObject:(currentUser *)object;
@end
Configurations.m
#import "configurations.h"
@implementation configurations
- (void)saveCustomObject:(currentUser *)object {
NSData *encodedObject = [NSKeyedArchiver archivedDataWithRootObject:object];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:encodedObject forKey:@"lastUser"];
[defaults synchronize];
}
- (currentUser*)loadCustomObject {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *encodedObject = [defaults objectForKey:@"lastUser"];
currentUser *object = [NSKeyedUnarchiver unarchiveObjectWithData:encodedObject];
return object;
}
@end
Это, как я загрузке CurrentUser.
saver = [[configurations alloc]init];
currentUser *tmpUser = [saver loadCustomObject];
thisUser = [currentUser instance];
static dispatch_once_t once;
dispatch_once(&once,^{
if(tmpUser != nil){
if(![tmpUser.username isEqualToString:@""]){
for(Friend *savedFriend in tmpUser.FriendsList)
{
[thisUser addFriend:savedFriend];
}
thisUser.username = tmpUser.username;
thisUser.email = tmpUser.email;
thisUser.userID = tmpUser.userID;
thisUser.userPSW = tmpUser.userPSW;
thisUser.userImg = tmpUser.userImg;
});
Где вы определяете FriendsList свойство? – Dash
Кстати, в объекте-c стандартно капитализировать имена классов, но не имена свойств/переменных. – Dash
Я определяю свойство FriendsList в CurrentUser.h как: @property (неатомный, сильный) NSMutableArray * FriendsList; –