如果用于模拟蓝牙键盘或鼠标的iPhone/Android应用程序,它似乎非常有用.例如,你打开应用程序,突然你可以在你的iPhone键盘和PC/PS3 /等上打字.与它配对就好像它是一个蓝牙键盘并接收打字的字母.
这个想法对我来说似乎很直观,我认为它不存在的唯一原因是它不可能,但我不明白为什么它不可能.
是否存在蓝牙限制,导致设备无法模拟其他类型的设备?或者,iOS或Android暴露的API的限制可能会抑制这种情况?
编辑:看起来iPhone蓝牙API相当有限,因为您只能与Apple许可的配件进行通信:是否可以开发具有蓝牙功能的iOS应用程序? 这可能会排除其他类型设备仿真的任何内容.但问题仍然是针对Android开放的.
例如,我需要NSString至少有8个字符....而不是使用循环来添加左边的填充空格,无论如何要做到这一点?
Examples:
Input: |Output:
Hello | Hello
Bye | Bye
Very Long |Very Long
abc | abc
Run Code Online (Sandbox Code Playgroud) 简洁版:
我正在寻找以下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?
我的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?
我正在使用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事件,那将是非常好的.
我们在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.
#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) 我们有一个非常大的内部MFC应用程序。它具有一个带菜单栏的主窗口,以及数百个唯一的子窗口(无菜单栏),这些子窗口显示在主窗口的顶部(并非同时显示)。这些子窗口实现为,CDialog但CreateWindow无法运行(通过,不是DoModal)。他们的父母HWND定为NULL。
我们最近收到了一项功能请求-即使子窗口之一是活动窗口,也可以从主窗口中使用特定的菜单栏加速器。从用户的角度来看,这是有道理的。
可以通过应用程序范围的键盘挂钩很容易地伪造它,并注意确切的击键,但是我想知道是否有更干净的方法?
有一些关于此的帖子,但它没有回答我的直接问题.
目前我们使用以下代码:
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界面.
为什么下面的代码是非法的?
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