我有一个表格 View ,我在其中使用 sectionIndexTitlesForTableView 来显示索引。我必须显示位于不同国家/地区的大学列表。每个国家可以有不止一所大学,所以表格显示如下:
1. Ecuador
1. Universidad Catolica del Ecuador
2. El Salvador
1. Universidad Don Bosco
3. Estonia
4. Tallin University
4. Tartu Health Care College
4. University of Tartu
4. Finland
5. Aalto University
....
我打算做的是,使用侧面的滚动搜索,当用户触摸“A”时,它会将您带到第一个带有字母 A 的条目。例如,当我按“E”时,它应该我到“厄瓜多尔”部分(显示在上面的“图像”上)。
问题一开始就出现了,因为我有多个部分,当我按“B”时,它将带我到“澳大利亚”,第二部分(第一个是阿根廷)而不是带我到“比利时”,这将是第一个带有 B 字母的国家。我设法解决了这个问题,但它给了我错误。这是代码:
- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView
{
return [[UILocalizedIndexedCollation currentCollation] sectionIndexTitles];
}
- (NSInteger)tableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index
{
NSArray* bu =[self SectionsASaltar];
int ins =[[bu objectAtIndex:index] intValue];
return [[UILocalizedIndexedCollation currentCollation] sectionForSectionIndexTitleAtIndex:ins];
}
-(NSArray*)SectionsASaltar
{
NSArray* ALF= [[NSArray alloc] initWithObjects:@"A",@"B",@"C",@"D",@"E",@"F",@"G",@"H",@"I",@"J",@"K",@"L",@"M",@"N",@"O",@"P",@"Q",@"R",@"S",@"T",@"U",@"V",@"W",@"X",@"Y",@"Z", nil];
NSMutableArray* jumps =[[NSMutableArray alloc]initWithObjects:@"0", nil];
int i=0; //contador de elementos
int j=0; //contador del alfabeto
[titl addObject:[self.secc objectAtIndex:i]];
do {
if ([[self.secc objectAtIndex:i] hasPrefix:[ALF objectAtIndex:j]]) {
i++;
}else{
[jumps addObject:[NSString stringWithFormat:@"%d",i]];
i++;
j++;
}
} while (i<[self.secc count]);
[jumps addObject:[NSString stringWithFormat:@"0"]];
NSLog(@"%@",jumps);
return jumps;
}
其中 self.secc 是我的包含部分的数组,jumps 是一个数组,其中包含我必须在索引上跳过才能到达下一个字母的元素数。
上面代码的思路是计算有多少个元素有字母A,存储它并在用户按下B时跳过它们,所以它会直接转到第一个字母B。它适用于大多数字母但是一旦我按下字母 M,就会出现以下错误:
*** Terminating app due to uncaught exception 'NSRangeException', reason: '-[__NSCFArray objectAtIndex:]: index (29) beyond bounds (28)'
*** First throw call stack:
(0x25f9012 0x21c6e7e 0x25f8deb 0x25ed7e0 0x13137be 0x1dcd2 0x10d27ee 0x21da705 0x102e920 0x102e8b8 0x10ef671 0x10efbcf 0x124396d 0x12439a6 0x10ee7e2 0x105e16d 0x105e552 0x103c3aa 0x102dcf8 0x32b3df9 0x32b3ad0 0x256ebf5 0x256e962 0x259fbb6 0x259ef44 0x259ee1b 0x32b27e3 0x32b2668 0x102b65c 0x2bbd 0x2af5 0x1)
libc++abi.dylib: terminate called throwing an exception
(lldb)
我真的不知道我在哪里越界了,我认为它在行中:
return [[UILocalizedIndexedCollation currentCollation] sectionForSectionIndexTitleAtIndex:ins];
但我不知道该语句是如何工作的,所以我不知道如何修复它。有任何想法吗? 此外,这是我编制索引的最佳方法,还是有更简单的方法来管理相同字母的部分。我知道我可以做出另一种观点,然后让第一种观点只有按字母排序的国家,第二种观点是大学,但我正在努力避免这种情况。
最佳答案
您的代码假定字母表中的每个字母都有一个条目。如果不是,那么它将递增 i 和 J,跳过事件条目。因此,如果您有一个以字母 a、c、d、e 开头的数组,那么您的代码将用 a 测试 a,然后用 b 测试 c,递增两个索引器,在下一个循环中它将用 c 而不是 c 测试 d与c。因为你不断递增 j 你可以超越你的项目索引。
关于objective-c - 具有多个部分时使用 sectionIndexTitlesForTableView 进行索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14207186/
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
在控制台中反复尝试之后,我想到了这种方法,可以按发生日期对类似activerecord的(Mongoid)对象进行分组。我不确定这是完成此任务的最佳方法,但它确实有效。有没有人有更好的建议,或者这是一个很好的方法?#eventsisanarrayofactiverecord-likeobjectsthatincludeatimeattributeevents.map{|event|#converteventsarrayintoanarrayofhasheswiththedayofthemonthandtheevent{:number=>event.time.day,:event=>ev
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..