对于一般化的问题,我很抱歉...我已经找了很长时间没找到任何我可以使用或者很容易适应的东西.我真的很感激任何指针!
我正在构建一个参考应用程序,它将包含几个纯文本格式的教科书.我希望用户能够执行搜索,并获得一个包含结果列表的表格.我有一个工作原型,但我写的搜索逻辑并不是那么聪明,它一直试图让它变得更好.
这显然是一个相当普遍的问题,因此我正在寻找一种可以适应任务的工具.到目前为止,我找到了Lucene(http://vafer.org/blog/20090107014544/)和Locayta(http://www.locayta.com/iOS-search-engine/locayta-search-mobile/)
Lucene似乎最近更新了iOS 2 ...我甚至不知道我是否能够自己重做它.也许.
Locayta可能效果很好,但是商业许可证是1000美元,我可能不会很快用这个应用程序来补偿它,因为它是一个利基市场.
谢谢!
我是C++的新手所以请原谅noob问题.在我的程序中,我通过引用将一个"Employee"对象的向量传递给一个函数,该函数在向量中的每个对象上调用一个Employee成员函数,将"salary"提高"r"%(在这种情况下为2%).我已经通过记录调用验证了这种情况(薪水在函数中发生了变化),但更改不会持续...当我再次打印Employee对象时,工资不变.感谢任何帮助!
// main.cpp
void raiseAllBy2Percent(vector<Employee> &v)
{
for (int i = 0; i < v.size(); i++)
{
Employee e = v[i];
e.salaryRaise(2);
}
}
// Employee.cpp
void Employee::salaryRaise(double r)
{
cout << "**salaryRaise called";
_salary += (r/100 * _salary);
cout << "**new salary: " << _salary; // This logs with the change as expected
}
Run Code Online (Sandbox Code Playgroud) 这让我疯了......我以前工作得很好,不知道发生了什么变化.我通过蓝牙连接到专有的公司设备,它有auth芯片和(正如我所说)之前一切都很好.
我的iPad和配件都显示它们彼此连接.然而,当我尝试在我的应用程序中与设备通信时,大多数时候EAAccessoryManager甚至都找不到它......但偶尔我可以连接.是什么赋予了?
-(void)scanForDevice
{
NSArray *accList = [[EAAccessoryManager sharedAccessoryManager] connectedAccessories];
// This is ZERO every time...even though iPad and device both indicate connection.
DLog(@"accList count: %i", accList.count);
for (EAAccessory *accessory in accList)
{
for (NSString* protocolString in accessory.protocolStrings) {
if ([protocolString isEqualToString:[redacted]]) {
[self connectToAccessory:accessory];
break;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
ETA:我已经连接了一个按钮来调用showBluetoothAccessoryPicker ...方法在应用程序中显示蓝牙选择器.这导致了更多的混乱.iPad告诉我的配件我已经连接到(在设置中)显示在选择器中.单击它时,控制台输出如下:
2014-04-01 16:48:00.324 Subview[3438:60b] BTM: attempting to connect to service 0x00000080 on device [redacted] 00:07:80:73:06:01
2014-04-01 16:48:02.497 Subview[3438:60b] BTM: connection to service 0x00000080 on device [redacted] 00:07:80:73:06:01 …
Run Code Online (Sandbox Code Playgroud) 更新:
我创建了一个非常简单的独立项目来演示这个bug.如果有人想拉同样的,看看他们是否能找到我出错的地方,我一定会很感激.没有太多代码可供查看.公共回购:https: //github.com/reidnez/NSAttributedStringBugDemo
我在这里遇到一个非常奇怪的问题:我有一个桌面视图.每个单元格都有一个1-3个单词的标题标签,以及一个包含多个CSV关键字的关键字标签.我也有一个搜索栏.要求是当用户键入搜索栏时,每个单元格的标题和关键字的任何部分匹配都会突出显示.截图:
第一张图片是A-Okay.在第二个图像中,应突出显示标题标签的"an".但是,正如你所看到的,不是那么多......
这可以在"关键字"标签上完美地运行,如上所示.这两个标签的属性字符串都是由我写的类别(下面的代码)创建的.在两个字符串上调用相同的方法,并且看起来与调试器告诉我的行为相同.UI讲述了一个不同的故事.
我已多次遍历调试器,并且在所有情况下,属性字符串似乎已正确配置.我还验证了其他东西没有调用[tableView reloadData]
,我的代码中没有其他地方覆盖标签的值.这就是"方"的"an"匹配在调试器中的位置,就在单元格返回结束之前cellForRowAtIndexPath
:
(lldb) po customCell.entryTitleLabel.attributedText
F{
}an{
NSBackgroundColor = "UIDeviceRGBColorSpace 0.533333 0.835294 0.156863 1";
}g{
}
Run Code Online (Sandbox Code Playgroud)
对我来说很好......这正是我想要的.但是当细胞渲染时,没有任何亮点可见!更奇怪的是,作为一个实验,我尝试将标签设置为我在cellForRow中创建的完全任意的attributesString:
NSMutableAttributedString *fake = [[NSMutableAttributedString alloc] initWithString:@"Fang"];
[fake addAttribute:NSBackgroundColorAttributeName value:MATCH_TEXT_HILIGHT_COLOR range:NSMakeRange(1, 2)];
customCell.entryTitleLabel.attributedText = fake;
Run Code Online (Sandbox Code Playgroud)
这也失败了.根本没有突出显示...但我可以突出显示{0,1}到{0,fake.length}范围内的任何子字符串,并且它的行为与预期一致.同样,它似乎拒绝突出显示不从索引0开始的任何子字符串 - 但仅限于标题标签.
我失去了理智吗?我错过了什么?
下面是我的类别......但是我相信这个问题不在这里,因为它完全适用于关键字字符串,并且(再次)属性似乎在单元格返回之前正确设置:
-(void)hilightMatchingSubstring:(NSString*)substring color:(UIColor*)hilightColor range:(NSRange)range
{
if ([self.string compare:substring options:NSCaseInsensitiveSearch] == NSOrderedSame) {
[self addAttribute:NSBackgroundColorAttributeName value:hilightColor range:NSMakeRange(0, self.length)];
return;
}
// Sanity check. Make sure a valid …
Run Code Online (Sandbox Code Playgroud) 我的应用程序在启动时崩溃并出现以下错误:
由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[ setValue:forUndefinedKey:]: 此类与键 tableViewChannels 的键值编码不兼容。
这是一个我继承并重新设计的项目。我最初认为 tableViewChannels 是一个旧数组,但我已经在 XCode 中搜索了整个项目,但它没有出现在任何地方。
我使用我最喜欢的文本编辑器进入故事板查看原始 XML,并且确实找到了两个“tableViewChannels”实例,它们似乎是旧的 IBOutlets(它们实际上不再出现在视觉故事板中)。我删除了两者,保存,清理了构建文件夹,重新启动了 XCode,但仍然因完全相同的错误而崩溃。我对这段代码仍然潜伏在项目中的什么地方感到困惑。我很感激任何帮助。谢谢!
我已经在这个问题上工作了几天,我的解决方案都没有充足.我认为,我缺乏理论知识来实现这一目标,并且会喜欢一些建议(不一定是iOS特定的 - 我可以将C,伪代码,无论如何转化为我需要的东西).
基本上,我有两个iPhone.当用户按下按钮时,任何一个都可以触发重复动作.然后它需要通知其他iPhone(通过MultiPeer框架)触发相同的操作......但它们都需要在同一时刻启动并保持步调.我真的需要获得1/100秒的精度,我认为这个平台可以实现.
作为我的同步程度的半粗略衡量标准,我使用AudioServices在每个设备上播放"滴答声"...你可以很容易地通过耳朵告诉它们它们是如何同步的(理想情况下你不能识别多个声源).
当然,我必须以某种方式考虑MultiPeer延迟...并且它在我的测试中的变化很大,从0.1秒到.8秒.
发现系统时钟对我来说是完全不可靠的,我找到了一个NTP的iOS实现并且正在使用它.所以我有理由相信这两款手机在时间上有一个准确的共同参考(尽管我还没有找到一种测试这种假设的方法,而不是在两台设备上连续显示NTP时间,我这样做,而且看起来不错同步到我的眼睛).
我之前尝试的是用P2P消息发送"开始时间",然后(在接收方端)从1.5秒的常数中减去该延迟,并在该延迟之后执行动作.在发送方端,我只是等待该常量继续,然后执行操作.这根本不起作用.我离开了.
我的下一次尝试是在两端等待整整一秒被三整除,因为延迟似乎总是<1秒,我认为这会起作用.我使用"延迟"方法来简单地阻止线程.我知道这是一个棍棒,但我只是想在获得更优雅的解决方案之前获得时间工作期.所以,我的" 发送者 "(按下按钮的设备)执行此操作:
-(void)startActionAsSender
{
[self notifyPeerToStartAction];
[self delay];
[self startAction];
}
Run Code Online (Sandbox Code Playgroud)
收件人这样做,以响应代表电话:
-(void)peerDidStartAction
{
[self delay];
[self startAction];
}
Run Code Online (Sandbox Code Playgroud)
我的" 延迟 "方法如下所示:
-(void)delay
{
NSDate *NTPTimeNow = [[NetworkClock sharedInstance] networkTime];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:NSSecondCalendarUnit
fromDate:NTPTimeNow];
NSInteger seconds = [components second];
// If this method gets called on a second divisible by three, wait a second...
if (seconds % 3 == 0) {
sleep(1); …
Run Code Online (Sandbox Code Playgroud) ios ×5
bluetooth ×1
c++ ×1
eaaccessory ×1
ipad ×1
objective-c ×1
storyboard ×1
time ×1
uitableview ×1
vector ×1
xcode ×1