小编Hub*_*ast的帖子

是什么让钥匙串项目独一无二(在iOS中)?

我的问题涉及iOS(iPhone,iPad,...)中的钥匙串.我认为(但不确定)Mac OS X下的钥匙串的实现会以相同的答案提出同样的问题.


iOS提供五种类型(类)的钥匙串项.您必须为密钥选择这五个值中的一个kSecClass来确定类型:

kSecClassGenericPassword  used to store a generic password
kSecClassInternetPassword used to store an internet password
kSecClassCertificate      used to store a certificate
kSecClassKey              used to store a kryptographic key
kSecClassIdentity         used to store an identity (certificate + private key)
Run Code Online (Sandbox Code Playgroud)

经过阅读苹果文档,博客和论坛条目很长一段时间,我发现这种类型的钥匙串项目kSecClassGenericPassword从属性得到它的独特性kSecAttrAccessGroup,kSecAttrAccountkSecAttrService.

如果请求1中的这三个属性与请求2中的相同,则无论其他任何属性如何,您都会收到相同的通用密码keychain项.如果此属性中的一个(或两个或全部)更改其值,则会获得不同的项目.

但是kSecAttrService仅适用于类型的项目kSecClassGenericPassword,因此它不能成为任何其他类型的项目的"唯一键"的一部分,并且似乎没有文档明确指出哪些属性唯一地确定了钥匙串项目.

"GenericKeychain"类"KeychainItemWrapper"中的示例代码使用该属性kSecAttrGeneric使项目唯一,但这是一个错误.此示例中的两个条目仅存储为两个不同的条目,因为它们kSecAttrAccessGroup不同(一个设置了访问组,另一个允许它自由).如果您尝试使用Apple's添加没有访问组的第二个密码KeychainItemWrapper,则会失败.

那么,请回答我的问题:

  • 这是真的,那的组合kSecAttrAccessGroup,kSecAttrAccount并且kSecAttrService是一个钥匙串项目,其kSecClass是"唯一钥匙" kSecClassGenericPassword
  • 哪个属性使钥匙串项目唯一,如果kSecClass不是kSecClassGenericPassword

macos objective-c keychain ios

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

iOS-App(iPhone和iPad)中的手动语言选择

我的问题:

我的iPhone应用程序如何告诉iOS,用户确实在应用程序首选项中选择了一种语言,这与一般设置中设置的语言不同?

同一问题的其他表述:

我如何告诉系统,不NSLocalizedString (@"text", @"comment");应该访问系统范围内选定的语言,而是应用程序选择的语言?

背景,例如:

请以这种情况为例:德国移民的儿子住在法国东北部,毗邻卢森堡和德国.他的母语是法语,因此他确实将iPhone的用户界面语言设置为法语(设置 - >常规 - >国际 - >语言 - >Français).但由于他的文化背景以及他所居住的地区是双语的,他也会说德语.但他不会说十个英语单词.在iPhone(以及iPad)上,他没有机会选择第二语言,因此手机只知道他会说法语.它不了解其他语言的用户技能.

现在来了我的应用程序:我用英语和德语开发了它(德语是我的母语,英语是IT的标准语言).我根据多语言iOS应用程序的所有规则和最佳实践进行了开发.我的应用程序的"第一"语言(默认语言)是英语.

这意味着:

如果有人在他的"设置"中选择了英语或德语,则应用程序用户界面将自动使用所选语言.用户甚至不会注意到还有其他语言可用.

但如果他在常规设置中选择了任何其他语言(如中文,波兰语或法语),他将获得应用程序默认语言,在我的例子中,它是英语.但对于我的法德朋友来说,这不是最好的选择.他想使用现有的德语版本,但似乎没有办法让用户选择这个版本.

添加法语翻译可以解决我们法国 - 德国朋友的问题,但对于说其他两种语言(如意大利语和德语)的人不会,我不能用这个星球上所有语言支持我的应用程序.将默认语言设置为德语也不是最佳选择,因为对于说法语(母语)和英语(作为第二语言)的人来说,这会引起同样的问题.

所以我认为我的应用程序必须能够手动选择与预选语言不同的语言.将语言选择添加到应用程序设置面板不是问题.但是,我如何告诉系统,不NSLocalizedString (@"text", @"comment");应该访问系统范围内选定的语言,而应该使用应用内选择的语言?

localization appsettings selection ios

70
推荐指数
3
解决办法
6万
查看次数

应用程序在iPhone 5.1模拟器和带有iOS 5.1的真实iPhone 4上表现不同

简而言之:

当导航控制器的后退按钮的标题发生变化时,在某些情况下旧标题会被卡住并且不会显示新标题.这仅在某些可重现的情况下发生,而在其他情况下则按其设计工作.

这取决于硬件

  • iPhone 3G(iOS 4.2.1)和模拟器(iOS 5.1)中出现错误
  • 使用相同的源代码,iPhone 4(iOS 5.1)上没有错误

这取决于写入标题的单词

  • 当创建按钮时,它从我的自写创建方法获得与它自动获得的标题相同的单词(即导航控制器堆栈上的上一页的标题),以及当其他情况匹配时,当稍后尝试更改按钮的标题时,旧文本将被卡住,新标题将不会显示.
  • 当在创建时按钮获得一个与其默认标题不同的标题的单词时,只要您没有为其指定默认标题,其标题的每个后续更改都可以正常工作.
  • 如果在经过许多不同标题的成功更改后,您将单词放在按钮标题上,这是它的默认标题,那么这个单词就会被卡住.以后的更改将不被接受(没有任何消息,并且仅在其他情况匹配时)

这取决于按钮在此期间是否不可见.

  • 如果在导航控制器堆栈上推送了另一个视图,那么带有缺陷按钮的旧页面将被新页面隐藏,并且当新页面再次从堆栈中弹出时再次使按钮可见,(并且其他情况匹配)然后旧文本被卡住并且更改它的试验被忽略(没有任何消息).
  • 如果按钮是较新的隐藏,更改其标题永远不会有问题.我一直都在工作.

动画期间可以看到正确的标题

  • 当由于上述情况的组合而忽略了改变后退按钮标题的尝试时,当按下该后退按钮并且页面的向右滑动动画时,正确的标题无论如何变得可见约0.3秒.处理.在动画开始时,旧的标题被正确的标题替换,并且在动画期间可以看到正确的标题.

详细说明

这是关于UINavigationController后退按钮上的文字.我根据新的语言设置更改了这个按钮标题.目前,我的应用程序在导航控制器堆栈中最多有3个视图控制器.它们中的每一个都是`UITableViewController的不同子类.

表1,命名GeneralTableVC是堆栈上的根视图.它没有后退按钮.它为用户提供了他在应用程序中存储的内容的摘要,并显示了带有设置按钮的工具栏.

导航控制器提供了表1中可见的工具栏.它在表2和3中设置为不可见.此时工具栏中只有一个名为"设置"的按钮.触摸此设置按钮会将表2推入堆栈.

表2中SettingsTabVC有一个后退按钮,这是一个在模拟器中出现问题,但在运行iOS 5.1的真正iPhone 4上工作正常.

通过触摸表2的第一行,将创建一个新表(表3)并将其推入堆栈.

表3,LangSelectTableVC也有一个后退按钮,但这个在两个设备,iPhone模拟器和真正的iPhone 4中工作得很好.

表3是一个语言选择表,显示所有可用语言的列表(目前只有英语和德语).触摸行会立即更改设置.将重绘活动视图(表3),并在几毫秒内,屏幕上的所有文本都以新语言显示.

重绘表本身没有问题,导航栏中的标题也没问题.但是后退按钮上的文本也必须翻译,这有点棘手.我在两个后退按钮上都完成了相同的技巧,并且它对于表3中可见的按钮工作正常,该按钮指向表2.但是使用完全相同的代码,模拟器中存在问题(但不是真实的iPhone),表2中的按钮指向表1.

我给你一些代码片段和一些截图,向你展示我做了什么以及发生了什么:


源代码

ARC(自动参考计数)正在使用中.

我确实定义了一个重绘协议:

Protocols.h

#ifndef ToDo_Project_Protocols_h
#define ToDo_Project_Protocols_h

@protocol redrawProt
- (void) mustRedraw;
@end

#endif
Run Code Online (Sandbox Code Playgroud)

这是表1的标题:

GeneralTableVC.h

#import <UIKit/UIKit.h>
#import "Protocols.h"
// some other imports

@interface GeneralTabVC : UITableViewController <redrawProt>

@property id<redrawProt>   parent;
@property Boolean          mustRedrawMyself;
@property NSString*        backTitle;
@property …
Run Code Online (Sandbox Code Playgroud)

iphone ios ios-simulator

29
推荐指数
1
解决办法
2216
查看次数

如何在perl脚本中使用UTF8连接MySQL?

简而言之:

在Perl-Script中:如何以允许将perl脚本中的四字节unicode字符U + 1F61C("")传输到应存储此字符的MySQL-Table的方式连接到MySQL?

使用{mysql_enable_utf8 => 1}并不能解决问题.

详细地:

我有与问题错误1366(HY000)中描述的完全相同的问题:错误的字符串值:'\ xF0\x9F\x98\x9C'用于第1行的"注释"列,甚至具有相同的Unicode字符(= U + 1F61C = 带有踩踏舌片和眨眼的脸部,产生错误信息

DBD::mysql::st execute failed: Incorrect string value: '\xF0\x9F\x98\x9C' for column ...
Run Code Online (Sandbox Code Playgroud)

但我不使用PHP,我使用Perl.

另一个问题中接受的答案是:

  • 运行MySQL 5.5或更高版本.
    我查看版本:

    mysql> select version();
    +-------------------------+
    | version()               |
    +-------------------------+
    | 5.7.13-0ubuntu0.16.04.2 |
    +-------------------------+
    
    Run Code Online (Sandbox Code Playgroud)

    所以5.7比5.5晚.
    ✅checked

  • 将表格的字符设置为utf8mb4.
    我检查了我的数据库,我的表甚至报告列的字符集:

    mysql> SELECT default_character_set_name FROM information_schema.SCHEMATA 
        -> WHERE schema_name = "myDatabase";
    +----------------------------+
    | default_character_set_name |
    +----------------------------+
    | utf8mb4                    |
    +----------------------------+
    
    mysql> SELECT CCSA.character_set_name FROM information_schema.`TABLES` T, …
    Run Code Online (Sandbox Code Playgroud)

mysql unicode perl utf-8

17
推荐指数
1
解决办法
1849
查看次数

如何将"全文"设置为phpMyAdmin的默认值?

我正在使用phpMyAdmin v3.4.10.1deb1来管理我的Ubuntu-Server上的一些MySQL表,其中包含具有SQL格式"TEXT"的字段.显示这些字段时,默认情况下会截断它们.我总是要点击符号"←T→"将文本扩展到它们的全长.但我不想对每一个查询执行此操作,因为这意味着每个查询帽都要执行两次.

我希望"全文"是默认的.但我找不到放置它的地方.

你能帮我吗?

phpmyadmin

16
推荐指数
4
解决办法
8802
查看次数

purgeIdleCellConnections

关于这个问题的"重复"状态:
这个问题在2012年11月被问到,它包含问题的详细描述并有3个答案.
被称为"原始"的问题在2013年2月(在此"重复"之后3个月)被提出,没有详细描述,只有2个答案.这两个答案中最好的只是一个链接答案.


为什么我在控制台中收到此消息?:

purgeIdleCellConnections: found one to purge conn = (some object-ID)
Run Code Online (Sandbox Code Playgroud)

当我的应用程序启动时,我向我的服务器发送消息.我用这行代码做到了这一点:

@implementation AppStatus {
    NSMutableData*   activeDownload;
    NSURLConnection* Connection;
}

- (id) init {
    self = [super init];
    if (self) {
        activeDownload = nil;
        Connection     = nil;
    }
    return self;
}

- (void)sendStatus:(NSString*)url {
    NSString* escaped = [url stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
    NSURLConnection* conn =[[NSURLConnection alloc] initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:escaped]] delegate:self];
    Connection = conn;
    NSLog(@"%s Connection=%@",__PRETTY_FUNCTION__,Connection);
}
Run Code Online (Sandbox Code Playgroud)

在同一个文件中我有这个委托方法:

- (void)connection:(NSURLConnection*)connection didReceiveData:(NSData*)data {
    NSLog(@"%s connection=%@",__PRETTY_FUNCTION__,connection);
    [activeDownload appendData:data];
}

- (void)connection:(NSURLConnection*)connection didFailWithError:(NSError*)error {
    NSLog(@"%s …
Run Code Online (Sandbox Code Playgroud)

ios

11
推荐指数
3
解决办法
9454
查看次数

Python 中的特征值:一个错误?

这里有两个关于方阵的特征向量和特征值的假设。我相信两者都是正确的:

  1. 如果一个矩阵是对称的并且只包含实数,那么它就是一个厄米矩阵,那么所有的特征值都应该是实数,所有特征向量的所有分量也应该是实数。当您从 Hermitian 矩阵计算特征向量和特征值时,结果中不应出现复数。

  2. 从给定矩阵计算的给定特征值的特征向量应始终指向仅由矩阵和特征值确定的方向。用于计算它的算法对结果没有影响,只要正确执行算法即可。

但是,当您在 Python 中使用标准库来计算特征向量和特征值时,这两个假设都不成立。这些方法是否包含错误?

有四种不同的方法可以从 Hermitian 矩阵计算特征值和特征向量:

  1. numpy.linalg.eig
  2. scipy.linalg.eig
  3. numpy.linalg.eigh
  4. scipy.linalg.eigh

#1 和 #2 可用于任何方阵(包括 Hermitian 矩阵)。
#3 和 #4 仅用于 Hermitian 矩阵。据我所知,他们的目的只是为了让他们跑得更快,但结果应该是一样的(只要输入真的是 Hermitian)。

但是对于相同的输入,这四种方法会产生三种不同的结果。这是我用来测试所有四种方法的程序:

#!/usr/bin/env python3

import numpy as np
import scipy.linalg as la

A = [
    [19, -1, -1, -1, -1, -1, -1, -1],
    [-1, 19, -1, -1, -1, -1, -1, -1],
    [-1, -1, 19, -1, -1, -1, -1, -1],
    [-1, -1, -1, 19, -1, -1, -1, -1],
    [-1, -1, -1, -1, 19, -1, …
Run Code Online (Sandbox Code Playgroud)

python numpy linear-algebra scipy eigenvector

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

本地AJAX呼叫远程站点在Safari中工作,但在其他浏览器中不起作用

我正在维护一个使用Javascript的网站.该脚本使用jQuery并从通常托管站点的服务器加载一些内容.

为了方便维护网站,我在iMac上运行了该网站的本地副本.当我使用Safari时,这完全正常.但Firefox,Opera和Chrome拒绝使用.我想这是因为跨域策略.(我无法使用IE测试,因为IE必须在我的iMac上的虚拟机中运行,因此无法访问任何本地文件)

在Firefox和其他浏览器中是否有一个设置,我可以告诉浏览器ajax加载位于远程服务器上的文件是否可以使用本地javascript从本地html页面加载?

简而言之:这是我的html页面:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>some title</title>
        <link rel="stylesheet" type="text/css" href="../css/stylesheet.css">
        <script src="../js/jquery-2.1.3.min.js"></script>
        <script src="../js/myScript.js"></script>
    </head>
    <body>
        <!-- some content with a div-container to receive the ajax-content -->
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

这是myScript.js:

var errorMsg = function (msg) {
    //insert the message into the html-page
};

var JSONerror = function (jqXHR, textStatus, errorThrown ) {
    var msg = 'JSON-answer: '+jqXHR.responseText;
    msg += '<br>'+'JSON-Errorstatus: '+textStatus;
    if ($.type(errorThrown) === 'string') {
        msg += '<br>'+'Error: '+errorThrown;
    }
    errorMsg(msg);
};

var …
Run Code Online (Sandbox Code Playgroud)

javascript ajax jquery cross-browser cross-domain

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

通过开放图形API获取FB页面的对话

我已经注册了一个Facebook-App并创建了一个具有我需要的所有权限的令牌.其中

  • manage_pages
  • read_mailbox
  • read_page_mailbox

现在我想使用Facebook开放图形API从我自己的FB页面读取一些数据.我想阅读页面收到的私人消息以及我代表我的页面上的一些粉丝发送的消息.

我知道我可以通过发送这样的http请求来获取所有信息:

https://graph.facebook.com/{page-id}/{object}?access_token={token}
Run Code Online (Sandbox Code Playgroud)

{something}实际值的占位符在哪里.为了给出一个工作示例,我可以通过发送此请求来阅读我页面上显示的帖子:

https://graph.facebook.com/141928949155955/posts?access_token={my secret token}
Run Code Online (Sandbox Code Playgroud)

正如我所说,这项工作正常,因为两年多了.(我只需要不时更新令牌)


但现在我想阅读页面和它的粉丝之间的私人谈话.我想提取所有会话并将其插入电子表格中.我想做一次,也许再过一两年.我可以通过复制和粘贴为每个对话从浏览器窗口手动提取它们,但由于会话太多,我认为花费更少的时间让程序为我完成.

如果我理解Facebook文档是正确的,那么我必须使用的关键字conversations.但我明白了:

https://graph.facebook.com/141928949155955/conversations?access_token={secret token}  

{
   "error": {
      "message": "(#210) Subject must be a page.",
      "type": "OAuthException",
      "code": 210
   }
}
Run Code Online (Sandbox Code Playgroud)

但是141928949155955 一个页面.我不知道我做错了什么.我必须发送哪些正确的请求来接收页面私人谈话?


编辑(6月16日):

我可以通过这个请求阅读我的个人对话:

https://graph.facebook.com/me/conversations?access_token={secret token}  
Run Code Online (Sandbox Code Playgroud)

但我不想阅读我作为一个人所做的对话.我需要我的一个页面.

facebook facebook-graph-api

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

如何使用javascript访问移动设备摄像头?

我想编写一个Web应用程序(html + css + javaScript),当该应用程序在带有摄像头的设备(如手机)上运行时,应该能够将此摄像头用作条形码扫描仪。我知道有条形码阅读器库,但是我想尝试编写自己的扫描仪。(因为我想详细了解它的工作原理。)

加载Web应用程序后,用户应允许该应用程序使用凸轮。但是随后,其他所有操作都应在无需用户交互的情况下工作,即在允许使用摄像头后,无需点击任何按钮。用户的下一个工作是将相机保持在条形码上,直到他按下完成按钮或关闭浏览器为止。但是在扫描时,无需敲击。

我的应用程序应该经常从相机视频流中制作快照。这样的快照不打算显示(用户可以直接从cam观看视频流),也不打算存储在任何地方。它必须在JavaScript中作为位图(即二维数组)可用,其中该数组中的每个项都保存单个像素的RGB值。

当脚本收到这样的数组时,它将对其进行分析并尝试识别条形码。如果成功识别了代码,则该代码将发送到服务器。然后应该拍摄下一个快照。另外,如果找不到代码,则应拍摄新快照。这会无休止地重复,直到用户退出扫描为止。

很高兴:
我不需要相机可以看到的整个屏幕区域。我只需要一个小的矩形剪辑(例如640x320像素)。

我知道您可以使用此html代码段将视频上传到服务器

<form action="server.cgi" method="post" enctype="multipart/form-data">
  <input type="file" name="video" accept="video/*" capture>
  <input type="submit" value="Upload">
</form>
Run Code Online (Sandbox Code Playgroud)

但是我不知道这如何帮助我解决问题。你能帮助我吗?

(我不知道这是否有区别,但是我使用jQuery。)

javascript camera web-applications

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