在 objective c 中设置 UIImageView 时出现致命错误
Fatal error when setting UIImageView in objective c
你好,我有一个 UIImageview 并试图设置以前保存在 NSArray 中的图像,然后将 NSArray 保存到 NSMutableDictionary 中。这是错误和代码。任何帮助表示赞赏。
*** 由于未捕获的异常 'NSInvalidArgumentException' 而终止应用程序,原因:'-[__NSCFConstantString _isSymbolImage]:无法识别的选择器发送到实例 0x100e14318'
以 NSException
类型的未捕获异常终止
myAppDelegate *appDelegate = (myAppDelegate *)[UIApplication sharedApplication].delegate;
NSMutableArray *allKeys = [[appDelegate.localDataForIngestAndErrorVideos allKeys] mutableCopy];
for (NSString *key in allKeys) {
NSArray *object = (NSArray*)[appDelegate.localDataForIngestAndErrorVideos objectForKey:key];
NSLog(@"id object ingest: %@",[object objectAtIndex:0]);
if ( [cell.Model.ContentItem.videoUploadStatus isEqualToString:@"ingest"])
{
cell.Model.ContentItem.mediaVideoUriHls = (NSURL*)[object objectAtIndex:2];
UIImage *tempImage = [[UIImage alloc]init];
tempImage = [object objectAtIndex:1];
[cell.mediaImageView setImage:tempImage]; <=== here crashes
}
}
错误 [__NSCFConstantString _isSymbolImage]: unrecognized selector sent to instance
是这样说的:
我们先翻译一下:__NSCFConstantString
是NSString
的内层(优化)class,所以就当成NSString
所以你有 NSString
实例,你尝试在它上面调用 _isSymbolImage
方法。该方法是隐藏的,它是来自 iOS SDK 的后台调用。
但是 NSString
上不存在该方法,它不知道它,因此出现错误。
看到崩溃线:
[cell.mediaImageView setImage:tempImage];
调用的内部方法是有意义的,您正在将 tempImage
视为 UIImage
。
所以 [object objectAtIndex:1]
是 NSString
而不是 UIImage
。
现在,我建议为您的 NSDictionary
appDelegate.localDataForIngestAndErrorVideos
使用自定义模型。这比处理 NSArray
/NSDictionary
每次都不知道里面有什么要好。
您还可以向其添加 methods/compute 属性,例如 -(NSURL)ingestURL
等,以使您的代码更简单易读。
旁注:
UIImage *tempImage = [[UIImage alloc]init];
tempImage = [object objectAtIndex:1];
alloc/init没用,因为你在设置值。您正在无意义地执行 alloc/init,因为您在之后忽略了它。
你好,我有一个 UIImageview 并试图设置以前保存在 NSArray 中的图像,然后将 NSArray 保存到 NSMutableDictionary 中。这是错误和代码。任何帮助表示赞赏。
*** 由于未捕获的异常 'NSInvalidArgumentException' 而终止应用程序,原因:'-[__NSCFConstantString _isSymbolImage]:无法识别的选择器发送到实例 0x100e14318' 以 NSException
类型的未捕获异常终止 myAppDelegate *appDelegate = (myAppDelegate *)[UIApplication sharedApplication].delegate;
NSMutableArray *allKeys = [[appDelegate.localDataForIngestAndErrorVideos allKeys] mutableCopy];
for (NSString *key in allKeys) {
NSArray *object = (NSArray*)[appDelegate.localDataForIngestAndErrorVideos objectForKey:key];
NSLog(@"id object ingest: %@",[object objectAtIndex:0]);
if ( [cell.Model.ContentItem.videoUploadStatus isEqualToString:@"ingest"])
{
cell.Model.ContentItem.mediaVideoUriHls = (NSURL*)[object objectAtIndex:2];
UIImage *tempImage = [[UIImage alloc]init];
tempImage = [object objectAtIndex:1];
[cell.mediaImageView setImage:tempImage]; <=== here crashes
}
}
错误 [__NSCFConstantString _isSymbolImage]: unrecognized selector sent to instance
是这样说的:
我们先翻译一下:__NSCFConstantString
是NSString
的内层(优化)class,所以就当成NSString
所以你有 NSString
实例,你尝试在它上面调用 _isSymbolImage
方法。该方法是隐藏的,它是来自 iOS SDK 的后台调用。
但是 NSString
上不存在该方法,它不知道它,因此出现错误。
看到崩溃线:
[cell.mediaImageView setImage:tempImage];
调用的内部方法是有意义的,您正在将 tempImage
视为 UIImage
。
所以 [object objectAtIndex:1]
是 NSString
而不是 UIImage
。
现在,我建议为您的 NSDictionary
appDelegate.localDataForIngestAndErrorVideos
使用自定义模型。这比处理 NSArray
/NSDictionary
每次都不知道里面有什么要好。
您还可以向其添加 methods/compute 属性,例如 -(NSURL)ingestURL
等,以使您的代码更简单易读。
旁注:
UIImage *tempImage = [[UIImage alloc]init];
tempImage = [object objectAtIndex:1];
alloc/init没用,因为你在设置值。您正在无意义地执行 alloc/init,因为您在之后忽略了它。