0

我对 Xcode 比较陌生,正在尝试编写一个应用程序来播放教程中的 iTunes 视频,但我的应用程序不断崩溃。

它给了我错误代码:

'NSInvalidArgumentException',原因:' * -[__NSArrayM insertObject:atIndex:]:对象不能为 nil'

我使用了断点并找到了问题所在,但我不确定如何解决它。给我带来问题的行是:

[list addObject:[item valueForProperty:MPMediaItemPropertyAssetURL]]; 

有没有人有任何想法?以下是 .m 文件代码:

@implementation iPodLibrary

+(NSArray *) movieList {

    NSMutableArray *list =

    [[[NSMutableArray allocWithZone:NULL] init] autorelease];

    MPMediaQuery *query = [[MPMediaQuery alloc] init];

    [query addFilterPredicate:[MPMediaPropertyPredicate

                               predicateWithValue:[NSNumber numberWithInteger:(MPMediaTypeAny ^ MPMediaTypeAnyAudio)]
                               forProperty:MPMediaItemPropertyMediaType]];

    for (MPMediaItem* item in [query items]) {
        [list addObject:[item valueForProperty:MPMediaItemPropertyAssetURL]];
    }
    [query release];

    return list;    
}

+ (NSString *) movieTitle:(NSURL *)aURL {

    NSString *aTitle = nil;

    if (aURL) {

        AVAsset* aAsset = [[AVURLAsset allocWithZone:NULL]
                           initWithURL:aURL options:nil];

        for (AVMetadataItem* metadata in [aAsset commonMetadata]) {

            if ([[metadata commonKey] isEqualToString:AVMetadataCommonKeyTitle]) {

                aTitle = [metadata stringValue];

                break;              
            }
        }       
    }

    return aTitle;    
}

@end
4

2 回答 2

1

检查 [item valueForProperty:MPMediaItemPropertyAssetURL] 是否实际返回一个值。NSMutableArray 不允许使用 addObject 方法添加 nil 值。请参阅NSMutableArray addObject:文档

您可以像这样检查它是否为空:

for (MPMediaItem* item in [query items]) {
    id itemValue = [item valueForProperty:MPMediaItemPropertyAssetURL];
    [list addObject:itemValue]; // break point this line and see what itemValue is.
}
于 2012-09-06T08:07:09.743 回答
0

在 Objective C 中,您不能将 nil 值放入NSArrayor NSDictionary

于 2012-09-06T08:09:09.623 回答