小编Tho*_*ann的帖子

确定哪个Linux系统库包含一个函数

我正在使用开发系统,我必须在访问其中的函数时指定lib名称.

我之前使用过像open()之类的函数,并以某种方式发现它们位于libc.so中.

现在我想使用lstat(),但看起来这个不在libc中.遗憾的是,我查看的手册页没有记录功能的位置.

那么,有两个问题:

  1. 有人可以告诉哪个lib主机lstat?
  2. 我怎么能一般地发现这个?除了在lib文件夹中的所有文件上使用grep"name"之外,我的意思是.

linux shared-libraries

10
推荐指数
1
解决办法
5263
查看次数

如何扩展NSTextStorage?

根据文档,我尝试子类化NSTextStorage并在文本视图中使用它:

/*
 NSTextStorage is a semi-abstract subclass of NSMutableAttributedString. It
 implements change management (beginEditing/endEditing), verification of
 attributes, delegate handling, and layout management notification. The one
 aspect it does not implement is the actual attributed string storage --- this is
 left up to the subclassers, which need to override the two
 NSMutableAttributedString primitives:

 - (void)replaceCharactersInRange:(NSRange)range withString:(NSString *)str;
 - (void)setAttributes:(NSDictionary *)attrs range:(NSRange)range;

*/
Run Code Online (Sandbox Code Playgroud)

所以我尝试使用delegate来处理具有相同功能的所有需要​​的事件:

@implementation MyTextStorage

- (id) init {
    self = [super init];

    if (self != nil) {
        storage = [[NSMutableAttributedString …
Run Code Online (Sandbox Code Playgroud)

cocoa objective-c nstextstorage

10
推荐指数
2
解决办法
2084
查看次数

按外接键盘上的Return键关闭UIAlertView

我正在显示一个像这样的简单警报视图:

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"title" message:@"msg" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
Run Code Online (Sandbox Code Playgroud)

现在,如果用户连接外部(蓝牙)键盘,我想在用户键入Return键时关闭警告对话框.

我该如何做到这一点?

这里的挑战是学习按键盘上的任何键.一旦知道了,解雇对话就很简单了[UIAlertView dismissWithClickedButtonIndex:...].

我试图实现该[UIViewController keyCommands函数,返回"\ r"的处理程序,但这仅在我的主视图显示时有效,而不是在显示警报时.

您可以在此处查看示例项目:https://github.com/tempelmann/AlertViewReturnKeyDismissal

注意:到目前为止,下面两个发布的解决方案通常不起作用,但仅限于从内部显示警报viewDidLoad.但是,当我显示过去的警报时,我需要这个工作viewDidLoad.

uialertview ios

9
推荐指数
1
解决办法
825
查看次数

将.xip文件解压缩到特定文件夹中

XIP文件是模拟到拉链,但允许施加和接收系统上验证的数字签名中,归档膨胀之前.当一个XIP文件被打开(通过双击),归档实用程序将自动扩展它(但只有数字签名是否完好).

本质上,.xip文件只是一个带有签名的.zip,用于验证文件自创建者保存以来未发生更改.这可以防止磁盘错误和第三方篡改文件造成的损害.

有谁知道,如何将此文件(例如使用终端)提取到特定文件夹而不是.xip文件所在的文件夹?

macos terminal extract osx-elcapitan

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

AppleScript:获取对象或类的所有属性的列表

为了存储对象的外部(外部AS)访问的值,我需要能够获取该对象的每个属性,然后我会尝试将其强制转换为文本并存储它.

如何获取对象包含的属性列表.举个例子,我可以这样写:

tell me
  get properties
end tell
Run Code Online (Sandbox Code Playgroud)

这适用于脚本对象.

但对于许多其他对象,我只是得到一个错误,如"描述符类型不匹配",如下所示:

tell application "iTunes"
  get properties of file track 1
end tell
Run Code Online (Sandbox Code Playgroud)

现在,我知道优秀的Script Debugger可以做到这一点(它可以显示任何对象的整个属性集),所以它也应该可以用AppleScript编写.这是什么秘密?

applescript

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

CryptoAPI:使用CryptVerifySignature通过公钥验证openssl的签名

我正在尝试将Mac 的AquaticPrime框架移植到Windows.

在Mac上,它使用的是opensll库,我试着理解如何将它移植到Windows,我想在那里我必须使用CryptoAPI.

我主要需要使用给定公钥验证生成的签名的代码.

以下是使用openssl进行验证的方法:

  1. 输入:许可证数据,公钥和签名,长度均为128字节.
  2. SHA1摘要是根据许可证数据计算的.
  3. 使用公钥数据建立RSA上下文
  4. 在给定RSA密钥和签名的情况下调用RSA_public_decrypt(),该签名返回20字节长的SHA1摘要 - 该摘要等于步骤2中的摘要,签名有效.

那么,我如何使用CryptoAPI执行此操作?我到目前为止:

  1. 从CryptAcquireContext开始(ctx,0,0,PROV_RSA_FULL,CRYPT_VERIFYCONTEXT)
  2. 帖子的帮助下使用CryptImportKey ,pubexp = 3,bitlen = 1024.一切正常,即我没有错误,我查看了二进制数据,以验证它是否与MSDN文章显示的相匹配.
  3. 从许可证数据创建SHA1摘要.我检索了生成的20字节哈希值,看到它与Mac上的openssl相匹配.

此时,我打电话给:

CryptVerifySignature (hashHdl, sig, sigLen, keyHdl, 0, 0)
Run Code Online (Sandbox Code Playgroud)

此操作失败,错误代码为ERROR_INVALID_PARAMETER.

奇怪的是,当我第一次意外地将两倍大的公钥存储到PUBLICKEYBLOB结构中时,我收到了一个N​​TE_BAD_SIGNATURE错误.这可能表明我现在传递的公钥是正确的.

为什么现在出现ERROR_INVALID_PARAMETER错误?我已经验证了哈希值是正确的,并且密钥似乎也被接受了.并且"sig"参数只是指向签名的128个字节的指针,而sigLen是128.

那么,我在这里错过了什么?

openssl rsa cryptoapi aquaticprime

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

如何在NSAttributedString中将字符大小写更改为Upper

我想将包含RTFD的NSAttributedString转换为大写,而不会丢失现有字符和图形的属性.

谢谢,

cocoa character nsattributedstring uppercase

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

我能告诉C++中用"new type [n]"创建的数组的大小吗?

使用C++ 11,我喜欢创建一个布尔数组并立即清除它

bool *mymap = new bool[n];
Run Code Online (Sandbox Code Playgroud)

n是可变的.

现在,这已经清除了阵列占用的内存吗?如果没有,是否有更好的方法来清除数组,而不是在所有元素上使用循环,将每个元素分别设置为false?

我考虑使用std:memset(),但这需要我知道数组的大小.现在,初学者可能会说:容易,大小是n*sizeof(布尔).但我不买.编译器可能决定以不同方式打包它们,甚至将它们打包为位,不是吗?

那么,有没有办法更清晰地告诉阵列的大小?我想可能有一个std:arraysize()函数,它只返回内存中已分配数组的空间.毕竟,必须以某种方式在运行时维护该信息,否则删除调用将不知道要释放多少,对吧?

c++ c++11

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

用于保留更改历史记录的 SQL 模式模式

考虑一个维护人员列表及其联系信息(包括地址等)的数据库。

有时,联系信息会发生变化。我喜欢保留更改的历史记录,而不是简单地将个人记录更新为新值。

我喜欢以这样的方式保存历史记录,当我查看一个人的记录时,我可以快速确定该人的数据还有较旧的记录。但是,我也希望避免构建非常复杂的 SQL 查询来仅检索每个人记录的最新版本(虽然这对于单个表可能很容易,但一旦该表连接到其他表,就会变得很困难)。

我想出了几种方法,我将在下面添加这些方法作为答案,但我想知道是否有更好的方法(虽然我是一名经验丰富的代码编写者,但我对 DB 设计还很陌生,所以我缺乏经验并且已经陷入了一些死胡同)。

哪个数据库?我目前正在使用 sqlite,但计划最终迁移到基于服务器的数据库引擎,可能是 Postgres。但是,我的意思是以更一般的形式提出这个问题,而不是特定于任何特定引擎,尽管出于一般利益,也欢迎如何在某些引擎中解决此问题的建议。

sql database-schema

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

新 NSSearchToolbarItem 的向后兼容性

在 macOS 11 中,Apple 引入了一个名为 NSToolbarItem 的新 NSToolbarItem NSSearchToolbarItem,当焦点切换到工具栏项时,它会自动调整大小以适应输入。

在此处输入图片说明 在此处输入图片说明

Apple 在此表示这与旧版本的 macOS 向后兼容:https : //developer.apple.com/wwdc20/10104(11:50 分钟)

但是,NSSearchToolbarItem在 macOS 10.13 (High Sierra) 上使用from interface builder启动我的应用程序时,我的应用程序会因以下应用程序特定信息而崩溃:

*** 由于未捕获的异常“NSInvalidUnarchiveOperationException”而终止应用程序,原因:“*** -[NSKeyedUnarchiver decodeObjectForKey:]:无法为密钥(NS.objects)解码类(NSSearchToolbarItem)的对象;该类可以在源代码或未链接的库中定义,并以 NSException 类型的未捕获异常终止

在 10.15 上启动它可以正常工作。我还没有能够测试 10.14。

Thomas Tempelmann 于 7 月 21 日更新

事实证明,这是旧 Xcode 12 版本的错误,现在已在 Xcode 12.5.1 中修复。

我已经开了一个赏金,因为我有一个看似相关的问题与高塞拉利昂运行时工具栏里面NSSegmentedControls的规格选择不当,但事实证明,这是一个单独的问题(这可以通过手动重置工具栏的固定minSize,并maxSize以控件frame.size)。

因此,解决方案是使用 Xcode 12.5.1 或更高版本。

macos cocoa nstoolbar nstoolbaritem

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