EXEC_BAD_ACCESS错误,

问题描述:

我读过这个错误来自内存管理问题,如发送消息,该消息已被释放的对象的内存管理问题。我在'评论'输出有关'信息'数组中的歌曲'的信息之后,在'第二部分的第一行'中找到错误。 info数组没有存储我在第一个'for'部分给出的对象吗?EXEC_BAD_ACCESS错误,

还有其他想法吗?

MPMediaQuery *query = [[MPMediaQuery alloc] init]; //query iPod library 
NSMutableArray *info; //create array to hold songs that fit 
NSArray *allSongs = [query collections]; 

//only add those songs which have not 
//been played since last login 

for (MPMediaItem *recent in allSongs) { 
    NSDate *lastPlayed = [recent valueForProperty:MPMediaItemPropertyLastPlayedDate]; 
    BOOL uploadInfo = [[PlayedSinceLastLogin alloc] initWithLastPlayedDateOfSong:lastPlayed] ; 
    if (uploadInfo == YES) { 
     [info addObject:recent]; 
    } 
} 

//output information about songs 
//in the 'info' array 

for (MPMediaItem *played in info) { 
    NSString *playCount = [played valueForProperty:MPMediaItemPropertyPlayCount]; 
    NSString *lastPlayed = [played valueForProperty:MPMediaItemPropertyLastPlayedDate]; 
    NSString *songTitle = 
    [played valueForProperty: MPMediaItemPropertyTitle]; 
    NSString *artistName = 
    [played valueForProperty: MPMediaItemPropertyArtist]; 
    NSString *albumName = 
    [played valueForProperty: MPMediaItemPropertyAlbumTitle]; 
    NSLog (@"\n %@ by %@, from album %@, played since last login.\nLast Played:%@.\nTotal Play Count: %@.", songTitle, artistName, albumName, lastPlayed,playCount); 

} 

它看起来并不像你曾经实际创建的NSMutableArray一个实例info指向,所以坏访问错误可能是由于试图把一些内存随机位作为一个初始化的对象。

变化

NSMutableArray *info; 

NSMutableArray *info = [NSMutableArray array]; 
+1

作为一个侧面说明,如果你真的偏执,这是一个好主意,如果你还没有准备好分配一个值零,初始化: NSMutableArray * info = nil; – makdad 2011-05-27 01:55:35

+0

非常好!我认为这个方法从a - 到a +之前是以前的一个ivar。非常感谢! – Chris 2011-05-27 02:42:11

+0

我也必须加注UITextView对象的实例吗?当我尝试将textView.Text更改为我刚制作的字符串时,出现类似的错误。 – Chris 2011-05-27 02:50:21