Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 具有未知内容数组的索引表视图?_Ios_Objective C_Uitableview - Fatal编程技术网

Ios 具有未知内容数组的索引表视图?

Ios 具有未知内容数组的索引表视图?,ios,objective-c,uitableview,Ios,Objective C,Uitableview,我想用右边的快速跳转索引为我的tableView songsTable创建一个索引。songsTable显示songsArray的内容,其中显示用户iPod库中的歌曲列表: 但是,所有演示如何为tableView编制索引的教程都已经知道了它们的内容。这些是我到目前为止看过的教程:,,还有其他一些。他们都用字典来存储他们的内容,我用的是NSArray 我努力学习AppCode教程,但在第一个关卡上遇到了困难: -(void)createAlphabetArray { self.alpha

我想用右边的快速跳转索引为我的tableView songsTable创建一个索引。songsTable显示songsArray的内容,其中显示用户iPod库中的歌曲列表:

但是,所有演示如何为tableView编制索引的教程都已经知道了它们的内容。这些是我到目前为止看过的教程:,,还有其他一些。他们都用字典来存储他们的内容,我用的是NSArray

我努力学习AppCode教程,但在第一个关卡上遇到了困难:

 -(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。