小编Rei*_*eid的帖子

用于在iOS包中搜索全文的工具

对于一般化的问题,我很抱歉...我已经找了很长时间没找到任何我可以使用或者很容易适应的东西.我真的很感激任何指针!

我正在构建一个参考应用程序,它将包含几个纯文本格式的教科书.我希望用户能够执行搜索,并获得一个包含结果列表的表格.我有一个工作原型,但我写的搜索逻辑并不是那么聪明,它一直试图让它变得更好.

这显然是一个相当普遍的问题,因此我正在寻找一种可以适应任务的工具.到目前为止,我找到了Lucene(http://vafer.org/blog/20090107014544/)和Locayta(http://www.locayta.com/iOS-search-engine/locayta-search-mobile/)

Lucene似乎最近更新了iOS 2 ...我甚至不知道我是否能够自己重做它.也许.

Locayta可能效果很好,但是商业许可证是1000美元,我可能不会很快用这个应用程序来补偿它,因为它是一个利基市场.

谢谢!

xcode full-text-search ios

8
推荐指数
1
解决办法
2884
查看次数

通过引用函数传递向量,但更改不会持续存在

我是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)

c++ vector pass-by-reference

8
推荐指数
1
解决办法
2万
查看次数

iPad显示连接的蓝牙配件,但EAAccessoryManager找不到它?

这让我疯了......我以前工作得很好,不知道发生了什么变化.我通过蓝牙连接到专有的公司设备,它有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)

bluetooth ipad ios eaaccessory

7
推荐指数
1
解决办法
2133
查看次数

NSMutableAttributedString不会显示以非零索引开头的属性

更新:

我创建了一个非常简单的独立项目来演示这个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)

uitableview ios nsmutableattributedstring

6
推荐指数
1
解决办法
676
查看次数

类与键的键值编码不兼容

我的应用程序在启动时崩溃并出现以下错误:

由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[ setValue:forUndefinedKey:]: 此类与键 tableViewChannels 的键值编码不兼容。

这是一个我继承并重新设计的项目。我最初认为 tableViewChannels 是一个旧数组,但我已经在 XCode 中搜索了整个项目,但它没有出现在任何地方。

我使用我最喜欢的文本编辑器进入故事板查看原始 XML,并且确实找到了两个“tableViewChannels”实例,它们似乎是旧的 IBOutlets(它们实际上不再出现在视觉故事板中)。我删除了两者,保存,清理了构建文件夹,重新启动了 XCode,但仍然因完全相同的错误而崩溃。我对这段代码仍然潜伏在项目中的什么地方感到困惑。我很感激任何帮助。谢谢!

storyboard ios

4
推荐指数
1
解决办法
6011
查看次数

通过Multipeer Framework暂时同步两个客户端

我已经在这个问题上工作了几天,我的解决方案都没有充足.我认为,我缺乏理论知识来实现​​这一目标,并且会喜欢一些建议(不一定是iOS特定的 - 我可以将C,伪代码,无论如何转化为我需要的东西).

基本上,我有两个iPhone.当用户按下按钮时,任何一个都可以触发重复动作.然后它需要通知其他iPhone(通过MultiPeer框架)触发相同的操作......但它们都需要在同一时刻启动并保持步调.我真的需要获得1/100秒的精度,我认为这个平台可以实现.

作为我的同步程度的半粗略衡量标准,我使用AudioServices在每个设备上播放"滴答声"...你可以很容易地通过耳朵告诉它们它们是如何同步的(理想情况下你不能识别多个声源).

当然,我必须以某种方式考虑MultiPeer延迟...并且它在我的测试中的变化很大,从0.1秒到.8秒.

发现系统时钟对我来说是完全不可靠的,我找到了一个N​​TP的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)

time objective-c ios multipeer-connectivity

3
推荐指数
1
解决办法
1165
查看次数