NSInvalidArgumentException:对象不能为nil

时间:2012-09-05 20:32:07

标签: objective-c nsarray null

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

它给了我错误代码:

  

'NSInvalidArgumentException',原因:' * - [__ NSArrayM insertObject:atIndex:]:object不能为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

2 个答案:

答案 0 :(得分:1)

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

您可以检查它是否为空:

for (MPMediaItem* item in [query items]) {
    id itemValue = [item valueForProperty:MPMediaItemPropertyAssetURL];
    [list addObject:itemValue]; // break point this line and see what itemValue is.
}

答案 1 :(得分:0)

在Objective C中,您无法将nil值放入NSArrayNSDictionary