В моем приложении пользователь выбрал фотографию из палитры.Я применяю выбранное изображение к представлению, а затем сохраняю его в файл и ссылаюсь на этот файл в настройках пользователя по умолчанию, чтобы при создании пользовательского профиля загружался аватар.
Когда я закрываю приложение и затем запускаю егоснова приложение загружает изображение из файла.После загрузки изображения из файла мое приложение падает, когда я применяю его к представлению «Изображение», поскольку оно отображается как __NSCFArray.На __NSCFArray нет шкалы методов.Почему он приводится к этому классу?
- [__NSCFArray scale]: нераспознанный селектор отправлен на экземпляр 0x145260
* Завершение работы приложения из-за неисчислимого исключения 'NSInvalidArgumentException ', причина:' [__NSCFArray scale]: нераспознанный селектор отправлен в экземпляр 0x145260 '
Вот мой код, в котором UIImage создается из файла:
@implementation UserProfile
- (id) init {
self = [super init];
if(self) {
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
_username = (NSString *)[userDefaults objectForKey:USERNAME_KEY];
NSString *filename = (NSString *) [userDefaults objectForKey:@"AvatarFilename"];
NSLog(@"filename from user defaults: %@",filename);
if (filename) {
_avatar = [UIImage imageWithContentsOfFile:filename];
if (!_avatar) NSLog(@"LOGERROR: avatar was not created from file");
_customAvatar = TRUE;
} else {
_customAvatar = FALSE;
_avatar = [UIImage imageNamed:DEFAULT_AVATAR_FILENAME];
if (!_avatar) NSLog(@"LOGERROR: avatar was not created from default");
}
[self createThumbnail];
}
return self;
}
Примечание: в моем коде createThumbnail я называю это [_avatar isKindOfClass: [UIImage class], и он говорит, что это UIImage.Но потом, когда я устанавливаю представление, он думает, что это __NSCFArray.Я даже не понимаю, как это возможно, так как свойство является UIImage *.
Вот как изображение сохраняется
- (void) setAvatar:(UIImage *)image
{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSString *filename = nil;
if (image) {
if (_avatar) [_avatar release];
_avatar = [image retain];
_customAvatar = TRUE;
filename = [NSString stringWithFormat:@"%@/%@",[MyUtilities applicationDocumentsDirectory],AVATAR_FILENAME];
if (![UIImagePNGRepresentation(image) writeToFile:filename atomically:YES])
NSLog(@"LOGERROR: Failure to write avatar file");
else NSLog(@"saved avatar to PNG file");
} else {
NSLog(@"setting default avatar");
_avatar = [UIImage imageNamed:DEFAULT_AVATAR_FILENAME];
_customAvatar = FALSE;
}
[userDefaults setObject:filename forKey:AVATAR_KEY];
// TODO If performance is crucial, consider creating a default thumbnail as well
[self createThumbnail];
if(![userDefaults synchronize])
{
NSLog(@"LOGERROR: Failure to synchronize userDefaults");
}
}
Насколько я знаю, я не получаю предупреждение памяти,