最近我从旧的ABAddressBook框架切换到新的CNContacts.在我的项目中,我将本机的联系人与我自己的核心数据联系人同步.为此,我使用联系人标识符和电话标识符来同步电话号码.
但我观察到有趣的事情,当我尝试编辑联系人时,我称这行代码
func getContact() -> CNContact? {
let contactStore = CNContactStore()
guard let contactRecord = try? contactStore.unifiedContact(withIdentifier: "8222B6F1-DE99-4099-82A4-47EAB9206A94:ABPerson", keysToFetch: [CNContactViewController.descriptorForRequiredKeys()]) else {
return nil
}
return contactRecord
}
@IBAction func showContact() {
let contactViewController = CNContactViewController(forNewContact: self.getContact())
contactViewController.delegate = self
contactViewController.title = "New Contact"
let navigationController = UINavigationController(rootViewController: contactViewController)
navigationController.navigationBar.isTranslucent = false
self.present(navigationController, animated: true, completion: nil)
}
func contactViewController(_ viewController: CNContactViewController, didCompleteWith contact: CNContact?) {
let newContact = self.getContact()
viewController.dismiss(animated: false, completion: nil)
}
Run Code Online (Sandbox Code Playgroud)
这很简单.但是如果在CNContactViewController中我编辑用户照片,电话标识符将会改变,即使我没有编辑该控制器中的电话号码.电话标识符可以像这样轻松打印:
po newContact?.phoneNumbers.first?.identifier
Run Code Online (Sandbox Code Playgroud)
这真的搞砸了我的同步,因为用户可能只是更换照片,但电话号码的标识符会改变,我将无法知道发生了什么.如果我编辑其他一些数据,如人名,公司等,这个标识符将不会改变......即使我将手机编辑为其他值,它也会保持不变.但由于某些原因,更改照片会让它完全混乱.
有没有人观察过这个? …
我已经制作了一个捕获设备视频输入的代码,到目前为止它工作正常.这是我设定的
// add preview layer
_previewLayer = [AVCaptureVideoPreviewLayer layerWithSession:_session];
_previewLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;
[self.videoView.layer addSublayer:_previewLayer];
// add movie output
_movieFileOutput = [[AVCaptureMovieFileOutput alloc] init];
[_session addOutput:_movieFileOutput];
AVCaptureConnection *movieFileOutputConnection = [_movieFileOutput connectionWithMediaType:AVMediaTypeVideo];
movieFileOutputConnection.videoOrientation = [self videoOrientationFromCurrentDeviceOrientation];
// start session
[_session startRunning];
Run Code Online (Sandbox Code Playgroud)
哪里:
- (AVCaptureVideoOrientation) videoOrientationFromCurrentDeviceOrientation {
switch ([[UIApplication sharedApplication] statusBarOrientation]) {
case UIInterfaceOrientationPortrait: {
return AVCaptureVideoOrientationPortrait;
}
case UIInterfaceOrientationLandscapeLeft: {
return AVCaptureVideoOrientationLandscapeLeft;
}
case UIInterfaceOrientationLandscapeRight: {
return AVCaptureVideoOrientationLandscapeRight;
}
case UIInterfaceOrientationPortraitUpsideDown: {
return AVCaptureVideoOrientationPortraitUpsideDown;
}
case UIInterfaceOrientationUnknown: {
return 0;
}
} …Run Code Online (Sandbox Code Playgroud) 我做了popover显示UITableViewController,用于导航.我有兴趣知道的是 - 你能在popover中使用导航控制器吗?假设您有表格,其中每一行都转换为新视图.这可以与popover视图一起使用,如果是这样,你能提供一些有用的例子吗?
我一直在使用MBProgressHUD来显示hud.在纵向模式下一切正常,但是当我改变设备方向时,hud没有正确旋转?
是否有一些财产以正确的方式设置?
我已经开始在iOS5中使用UIProgressView了,但还没有真正的运气.我无法更新视图.在每次更新进度后,我都有一系列顺序操作.问题是,进度视图不是一点一点地更新,而是仅在完成后才更新.它是这样的:
float cnt = 0.2;
for (Photo *photo in [Photo photos]) {
[photos addObject:[photo createJSON]];
[progressBar setProgress:cnt animated:YES];
cnt += 0.2;
}
Run Code Online (Sandbox Code Playgroud)
浏览堆栈溢出,我发现这些帖子 - 自iOS 5以来setProgress不再更新UIProgressView,暗示为了使其工作,我需要运行一个单独的线程.
我想澄清这一点,我真的需要单独的线程让UIProgressView正常工作吗?
我找到了这些斯坦福大学的教程https://itunes.apple.com/us/course/ipad-iphone-app-development/id495052415,并且一直在听关于核心数据的讲座,这真的很棒.
它显示了如何通过UIManagedDocument... 访问核心数据只有我不明白UIManagedDocument它应该知道它应该使用哪个模型,因为我没有看到它设置在任何地方?
在使用时总结一下UIManagedDocument,如何定义将要使用的数据库模型?
原生联系人应用程序具有有趣的效果 - 当用户尝试滚动时,滚动视图使用头像推送顶视图,并且仅当顶视图处于"小模式"时才向上滚动.
我能够通过didScroll方法调整滚动视图.但问题是,内容抵消也在改变,而我推顶了.在本机联系人中,仅当顶视图处于"小模式"时,内容偏移才会更改
有什么建议,他们是怎么做到的?
如标题所述,我具有要使用指定的DNS服务器解析的主机名(例如www.example.com)。例如,在一种情况下,我想使用Google的IPv4 DNS,在另一种情况下,则要使用Google的IPv6 DNS。
我在iOS上浏览了SO,找到了类似的问题(Swift-获取设备的IP地址),所以我确定可以做到,但是我不清楚如何做?
我怎样才能做到这一点?
编辑2018年6月7日
@mdeora从http://www.software7.com/blog/programmatically-query-specific-dns-servers-on-ios/提出的建议解决方案
此解决方案有效,但仅当我使用IPv4 DNS(例如Google的“ 8.8.8.8”)时才有效。如果我尝试使用IPv6 DNS 2001:4860:4860 :: 8888,我什么也收不到。
我设法更改了转换:
void setup_dns_server(res_state res, const char *dns_server)
{
res_ninit(res);
struct in_addr addr;
// int returnValue = inet_aton(dns_server, &addr);
inet_pton(AF_INET6, dns_server, &addr); // for IPv6 conversion
res->nsaddr_list[0].sin_addr = addr;
res->nsaddr_list[0].sin_family = AF_INET;
res->nsaddr_list[0].sin_port = htons(NS_DEFAULTPORT);
res->nscount = 1;
};
Run Code Online (Sandbox Code Playgroud)
但是仍然有麻烦:
void query_ip(res_state res, const char *host, char ip[])
{
u_char answer[NS_PACKETSZ];//NS_IN6ADDRSZ NS_PACKETSZ
int len = res_nquery(res, host, ns_c_in, ns_t_a, answer, sizeof(answer));
ns_msg handle; …Run Code Online (Sandbox Code Playgroud) 我在Apple商店上传了应用程序.现在我正在开发更新版本.但是,在处理现有项目时,我创建了具有不同名称的新项目.当我完成后,我更改了名称和包标识符以匹配现有的应用程序.
我尝试上传应用程序以测试航班,但我收到了错误
"Invalid IPA: The keychain-access-group in the embedded.mobileprovision and your binary don't match."
Run Code Online (Sandbox Code Playgroud)
所以我开始浏览网络以获得答案......我所提出的是启用权利.我做了,但无济于事......然后我编辑了权利,改变了这个:
$(AppIdentifierPrefix)com.xxxx
Run Code Online (Sandbox Code Playgroud)
对此:
12HJ2312.com.xxxx (the number is number of prefix from developer portal)
Run Code Online (Sandbox Code Playgroud)
它工作,我可以上传.世界再次变得美好.或者是吗?我仍然不明白为什么我要改变它.从哪里来
$(AppIdentifierPrefix)
Run Code Online (Sandbox Code Playgroud)
是红色的?我认为钥匙串是红色的,但似乎没有,因为钥匙串是我输入的相同值.那么我怎么能看到这个价值,它在哪里画出它的内容呢?
Genaral练习是指当您登录或执行其他需要您的用户名和密码的操作时,您将其发送到帖子请求的正文中.另外,为了增加安全性,应该使用https.
在get请求中,这些参数作为URL的一部分发送.但是在https中,正如我所理解的那样,正文和标题都是加密的.
所以从理论上讲,无论你使用https post还是get for send,你的数据都是安全的......在一种情况下,攻击者必须在你的标题和你的身体其他部分进行描述.
所以我的问题是,如果这一切都是真的,那么帖子怎么更安全?
ios ×8
ipad ×2
iphone ×2
avfoundation ×1
cncontact ×1
core-data ×1
dns ×1
http-get ×1
http-headers ×1
http-post ×1
https ×1
ios5 ×1
keychain ×1
objective-c ×1
swift ×1
uiscrollview ×1
video ×1