小编Sti*_*sis的帖子

手机可以假装是蓝牙键盘吗?

如果用于模拟蓝牙键盘或鼠标的iPhone/Android应用程序,它似乎非常有用.例如,你打开应用程序,突然你可以在你的iPhone键盘和PC/PS3 /等上打字.与它配对就好像它是一个蓝牙键盘并接收打字的字母.

这个想法对我来说似乎很直观,我认为它不存在的唯一原因是它不可能,但我不明白为什么它不可能.

是否存在蓝牙限制,导致设备无法模拟其他类型的设备?或者,iOS或Android暴露的API的限制可能会抑制这种情况?

编辑:看起来iPhone蓝牙API相当有限,因为您只能与Apple许可的配件进行通信:是否可以开发具有蓝牙功能的iOS应用程序? 这可能会排除其他类型设备仿真的任何内容.但问题仍然是针对Android开放的.

android bluetooth ios

27
推荐指数
2
解决办法
3万
查看次数

如何用空格填充NSString?

例如,我需要NSString至少有8个字符....而不是使用循环来添加左边的填充空格,无论如何要做到这一点?

Examples:

Input:    |Output:
Hello     |   Hello
Bye       |     Bye
Very Long |Very Long
abc       |     abc
Run Code Online (Sandbox Code Playgroud)

objective-c padding nsstring

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

Oracle OCI,绑定变量和ID IN(1,2,3)之类的查询

简洁版:

我正在寻找以下Java技术的C++ OCI改编,其中代码能够将数组数组(数组大小可以变化)绑定到非PL/SQL SELECT语句中,然后在WHERE ID IN (...)样式检查中使用结果数组.

http://rafudb.blogspot.com/2011/10/variable-inlist.html

原始问题:

我们有一个C++应用程序通过OCI与Oracle通信.我们正在尝试修复通过连接文本生成SQL查询的旧代码; 相反,我们希望尽可能多地使用绑定变量.我们提出了一个特殊的案例,即我们没有一个好的解决方案.

SELECT * FROM MyTable WHERE ID IN (1, 4, 10, 30, 93)
Run Code Online (Sandbox Code Playgroud)

其中(1, 4, 10, 30, 93)一部分来自一个vector<int>或数据的其他一些灵活大小容器.如果我们知道它总是五个值,我们可以这样做:

SELECT * FROM MyTable WHERE ID IN (:1, :2, :3, :4, :5)
Run Code Online (Sandbox Code Playgroud)

但它可能是一个条目,或十个,甚至可能是零.显然,如果我们将查询构建为字符串,我们可以根据需要添加尽可能多的数字,但目标是尽可能避免这种情况并坚持只绑定变量.

有没有一个很好的方法来实现这一目标?例如,在OCI中,我可以绑定一个数组然后从中进行子选择吗?

SELECT * FROM MyTable WHERE ID IN (SELECT * FROM :1)
Run Code Online (Sandbox Code Playgroud)

:1OCI阵列在哪里?(可能语法不同.)有没有人有这方面的经验?示例代码将是天赐之物,因为我倾向于编写原始OCI.谢谢 :)

编辑:我想比在PL/SQL过程解析的字符串中绑定更好,如果可能的话.我相信在很多情况下我们会吹掉4000个字符的限制,而且我觉得这只是交易一种我很舒服的字符串操作,另一种我不是(我不能)调试很容易).如果可能的话,我想将一个值数组(或某种形式的数据集)绑定到一个标准SQL语句中.

编辑2:一些调查发现以下链接似乎正在做我想要的,但在Java:http: //rafudb.blogspot.com/2011/10/variable-inlist.html有谁知道如何适应这个处理C++ OCI?

c++ sql oracle oracle-call-interface bind-variables

11
推荐指数
1
解决办法
7604
查看次数

tvOS - 在推 - 视 - 控制器转换期间按下MENU按钮

我的tvOS应用程序中有一个UIViewController,它只会显示几秒钟,并且需要完全可自定义的MENU按钮处理.我创建它是这样的:

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Add a tap gesture recognizer to handle MENU presses.
    UITapGestureRecognizer *tapGestureRec = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTap:)];
    tapGestureRec.allowedPressTypes = @[@(UIPressTypeMenu)];
    [self.view addGestureRecognizer:tapGestureRec];
}

- (void)handleTap:(UITapGestureRecognizer *)sender
{
    // Code to process the MENU button is here.
}
Run Code Online (Sandbox Code Playgroud)

我用以下方式显示视图控制器pushViewController:animated::

UIViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:identifier];
[self pushViewController:controller animated:isAnimated];
Run Code Online (Sandbox Code Playgroud)

我发现,如果用户在屏幕开始出现时立即按下MENU,同时仍然显示交叉渐变过渡效果,他们可以躲避UITapGestureRecognizer并返回到之前的屏幕,这不是预期的.它们也可以通过一遍又一遍地捣碎菜单来引起问题 - 最终它们将逃脱他们不应该做的事情.

如何确保MENU按下始终达到我的覆盖?有没有办法指定一个包含应用程序的MENU按钮处理程序,仍然使用UINavigationController?

uiviewcontroller uitapgesturerecognizer tvos siri-remote

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

tvOS - 通过非Siri遥控器进行游戏控制

我正在使用Objective-C开发一款游戏.Siri遥控器通过GCMicroGamepad可以很好地工作,真正的MFi控制器可以通过GCGamepad很好地工作.但是,第三方IR遥控器在游戏中根本不起作用(iPhone上的远程应用程序或旧的Apple TV第三代遥控器也没有).

如何识别和区分这些输入?


两天后......我发现当使用第三方电视遥控器或iPhone Remote.app时,可以使用UITapGestureRecognizer正确检测Up,Down,Left,Right和Select事件.定向事件实际上对于这些类型的遥控器也是唯一的--Siri遥控器不会生成定向抽头事件.不幸的是,点击Siri遥控器或第三方或iPhone Remote.app上的选择按钮将从我的点击识别器生成一个Select事件.我需要一些方法来区分这两者.

我能找到的唯一区别因素是点击Siri遥控器还会在GCMicroGamepad上生成按钮-A按下 - 第三方遥控器或iPhone Remote.app根本不会影响GCMicroGamepad.但尝试观看GCMicroGamepad以进行点击释放事件,然后使用该事件过滤掉匹配的"选择"按钮事件是非常不优雅的.当然不推荐使用API​​; 它似乎不是一个好的长期解决方案.如果我能告诉Siri遥控器在GCMicroGamepad模式下停止生成UI事件,那将是非常好的.

objective-c gamepad tvos siri-remote

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

Oracle 10:使用HEXTORAW填充blob数据

我们在Oracle中有一个表,其中BLOB列需要填充少量任意字节数据 - 我们永远不会输入超过4000字节的数据.

我正在使用现有的基于C++ OCI的基础结构,这使得在某些上下文中使用绑定变量非常困难,因此我需要仅使用简单查询来填充此BLOB列.(我们正在努力使其现代化,但今天不是一种选择,)

我们对这样的查询运气不错:

UPDATE MyTable
   SET blobData = HEXTORAW('0EC1D7FA6B411DA5814...lots of hex data...0EC1D7FA6B411DA5814')
 WHERE ID = 123;
Run Code Online (Sandbox Code Playgroud)

起初,这很有效.但是,最近我们遇到了一个需要输入2000多字节数据的情况.此时,我们遇到了Oracle错误,ORA-01704: string literal too long因为传递给的字符串HEXTORAW超过了4000个字符.我尝试拆分字符串然后连接||,但这并没有避免错误.

因此,我需要一种更新此列的方法,并使用简单的查询将其填充超过2000字节的数据.可能吗?

(我知道如果我拥有绑定变量,那将是微不足道的 - 实际上与该表交互的其他应用程序使用这种确切的技术 - 但不幸的是我无法在这里重构数据库内容.只需要将数据输入表格.)

编辑:

一种没有用的有希望的方法是连接RAW:

UTL_RAW.CONCAT(HEXTORAW('...'), HEXTORAW('...'), HEXTORAW('...'))
Run Code Online (Sandbox Code Playgroud)

这避免了字符串长度限制,但似乎Oracle在a的长度上也有一个匹配的内部2000字节限制RAW.所以我不能用一个填充blob RAW.也许有一个函数可以将多个RAWs 连接成一个BLOB.

sql oracle blob varbinary

6
推荐指数
2
解决办法
8661
查看次数

为什么左移32次无符号数不会产生零?

#include <iostream>

using namespace std;

int main()
{
   cout << "sizeof(unsigned int): " << sizeof(unsigned int) << endl; 
   unsigned a = 1;
   int i = 0;
   while (a) {         
        cout << "a[" << i++ << "]: " << a << endl;        
        a <<= 1;
   }

   cout << "a[" << i << "]: " << a << endl;

   unsigned b = 1;
   unsigned c = (b << 31);
   unsigned d = (b << 32);

   cout << "c: " << c << …
Run Code Online (Sandbox Code Playgroud)

c++ undefined-behavior

5
推荐指数
2
解决办法
797
查看次数

在无模式对话框窗口中通过加速键

我们有一个非常大的内部MFC应用程序。它具有一个带菜单栏的主窗口,以及数百个唯一的子窗口(无菜单栏),这些子窗口显示在主窗口的顶部(并非同时显示)。这些子窗口实现为,CDialogCreateWindow无法运行(通过,不是DoModal)。他们的父母HWND定为NULL

我们最近收到了一项功能请求-即使子窗口之一是活动窗口,也可以从主窗口中使用特定的菜单栏加速器。从用户的角度来看,这是有道理的。

可以通过应用程序范围的键盘挂钩很容易地伪造它,并注意确切的击键,但是我想知道是否有更干净的方法?

c++ winapi mfc acceleratorkey

5
推荐指数
1
解决办法
273
查看次数

IOS Facebook App URL fb://除了发布之外的选项

有一些关于此的帖子,但它没有回答我的直接问题.

目前我们使用以下代码:

NSString *post = [NSString stringWithFormat:@"fb://publish/profile/me?text=%@",@"Some Link"];
BOOL canOpenURL = [[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:post]];

if ( canOpenURL && ![Utils isipad] && hFaceBookCheckAppFirst ) 
    [[UIApplication sharedApplication] openURL:[NSURL URLWithString:post]];
Run Code Online (Sandbox Code Playgroud)

这适用于定位.它启动Facebook应用程序然后用户可以发布等.

可以用什么其他动词代替

fb://publish
Run Code Online (Sandbox Code Playgroud)

似乎无法找到关于此的文档.似乎没有出现在Facebook SDK文档中,这会调出Web界面.

facebook ios

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

尝试更好地理解C++大括号初始化语法

为什么下面的代码是非法的?

for (int index=0; index<3; index++)
{
    cout << {123, 456, 789}[index];
}
Run Code Online (Sandbox Code Playgroud)

虽然这很好:

for (int value : {123, 456, 789})
{
    cout << value;
}
Run Code Online (Sandbox Code Playgroud)

IDEOne中的代码:http://ideone.com/tElw1w

c++ initializer-list list-initialization

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