在目标 c 中设置 UIImageView 时出现致命错误

Fatal error when setting UIImageView in objective c

提问人:stefanosn 提问时间:1/30/2022 更新时间:1/31/2022 访问量:108

问:

您好,我有一个 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
                           }
}
iOS Objective-C UIImageView

评论

0赞 Larme 1/30/2022
[object objectAtIndex:1];不是一个 ,而是一个 .你能打印吗.UIImageNSStringobject
0赞 stefanosn 1/31/2022
你是对的,它不是UIImage,而是NSString。如果你想给出一个答案来接受它。

答:

0赞 Larme 1/31/2022 #1

错误是这样说的: 让我们先翻译一下:是 的内部(优化)类,所以只需将其视为 所以你有实例并尝试对它调用方法。该方法是隐藏的,它是来自 iOS SDK 的后台调用。 但是该方法不存在,它不知道它,因此您得到的错误。[__NSCFConstantString _isSymbolImage]: unrecognized selector sent to instance__NSCFConstantStringNSStringNSStringNSString_isSymbolImageNSString

看到崩溃线:

[cell.mediaImageView setImage:tempImage];

称为内部方法的方法是有意义的,您正在将其视为 .tempImageUIImage

所以不是.[object objectAtIndex:1]NSStringUIImage

现在,我建议为您的 .这比每次都不知道里面有什么要好。 您还可以向其添加方法/计算属性,例如 等,以使您的代码更简单、更易读。NSDictionaryappDelegate.localDataForIngestAndErrorVideosNSArrayNSDictionary-(NSURL)ingestURL

旁注:

UIImage *tempImage = [[UIImage alloc]init];
tempImage = [object objectAtIndex:1];

alloc/init 是无用的,因为你正在设置值。你无缘无故地做了一个 alloc/init,因为你在之后就忽略了它。