Ios 具有未知内容数组的索引表视图?
我想用右边的快速跳转索引为我的tableView songsTable创建一个索引。songsTable显示songsArray的内容,其中显示用户iPod库中的歌曲列表: 但是,所有演示如何为tableView编制索引的教程都已经知道了它们的内容。这些是我到目前为止看过的教程:,,还有其他一些。他们都用字典来存储他们的内容,我用的是NSArray 我努力学习AppCode教程,但在第一个关卡上遇到了困难:Ios 具有未知内容数组的索引表视图?,ios,objective-c,uitableview,Ios,Objective C,Uitableview,我想用右边的快速跳转索引为我的tableView songsTable创建一个索引。songsTable显示songsArray的内容,其中显示用户iPod库中的歌曲列表: 但是,所有演示如何为tableView编制索引的教程都已经知道了它们的内容。这些是我到目前为止看过的教程:,,还有其他一些。他们都用字典来存储他们的内容,我用的是NSArray 我努力学习AppCode教程,但在第一个关卡上遇到了困难: -(void)createAlphabetArray { self.alpha
-(void)createAlphabetArray
{
self.alphabetArray = [[NSMutableArray alloc]initWithCapacity:26];
for (int i=0; i< songs.count; i++)
{
NSString *firstletter=[[songs objectAtIndex:i]substringToIndex:1];
if (![self.alphabetArray containsObject:firstletter]) {
[self.alphabetArray addObject:firstletter];
}
}
[songs sortUsingSelector:@selector(localizedCaseInsensitiveCompare:)]; //sorting array in ascending array
NSLog(@"%@", self.alphabetArray);
}
我真的,真的很困惑,我找不到其他对这种情况有用的教程。任何帮助都将不胜感激。谢谢
编辑:我之所以说“未知内容”,是因为我不知道songsArray的内容是什么,就像其他教程一样,这些教程实际上提供了表格的内容。您不能逐个向NSArray添加对象。您可以将它们全部添加到一行中,也可以将数组复制到数组中。 您可能正在寻找的是NSMutableArray而不是NSArray。
这允许您随意添加对象。您可能应该在循环内部实现稍微不同的逻辑:
NSString *firstLetter = [songsArray[i] substringToIndex:1];
if (![self.alphabetArray containsObject:firstLetter]) {
[self.alphabetArray addObject:firstLetter];
}
更新
这将帮助您修复崩溃。但我还是不明白在未知内容下你是什么意思。在提供的代码中,我没有看到与此问题相关的任何内容。我收到一个错误-[MPConcreteMediaItem substringToIndex:]:无法识别的选择器发送到实例',这行有一个SIGABRT错误-NSString*firstletter=[[songs objectAtIndex:I]substringToIndex:1];:S@user3127576,好的,那么您正试图在未知类型的对象中调用NSString的方法。请不要这样做:如果您对songsArray中的对象一无所知,则无法显示任何有关它们的信息。这并不是因为所有的教程都不好。悲伤但却是真的。啊,原来我必须得到这首歌的标题,哦!谢谢你的回答。NSString*firstletter=[[songs objectAtIndex:i]valueForProperty:MPMediaItemPropertyTitle]子字符串到索引:1];songsArray应该是可变的arrayreason例外,为什么要初始化容量为0的alphabetArray?NSArray的No visible@接口声明选择器“addObject:”错误试图告诉您NSArray类甚至没有实现名为addObject:的方法,这是有充分理由的。如果查看NSArray类文档,将找不到名为addObject的实例方法。阅读下面的答案。NSArray是不可变的,一旦设置它们,它们就无法更改。如果希望能够添加和删除对象,则需要使用NSMutableArray。