我正在尝试在我的app委托中创建一个模态视图控制器(我创建了一个名为showLoginView的函数).但每当我尝试调用它时,我会在XCode中收到警告:
Warning: Attempt to present <PSLoginViewController: 0x1fda2b40> on <PSViewController: 0x1fda0720> whose view is not in the window hierarchy!
Run Code Online (Sandbox Code Playgroud)
这是方法代码:
- (void)showLoginView
{
PSLoginViewController *loginViewController = [[UIStoryboard storyboardWithName:@"MainStoryboard" bundle:NULL] instantiateViewControllerWithIdentifier:@"PSLoginViewController"];
[self.window.rootViewController presentViewController:loginViewController animated:NO completion:nil];
}
Run Code Online (Sandbox Code Playgroud)
如何将视图添加到窗口层次结构?或者也许我做错了什么?
我有一个工作的PHP应用程序,我想在其中添加实时支持.我想使用nodejs/socket.io来添加这种功能.
我发现的第一个问题是如何在nodejs端正确授权用户(用户已经通过PHP会话在php后端进行了身份验证).在nodejs端使用socket.handshake.header.cookie我可以解析并获取PHP会话ID,我可以通过redis/memcache/database进行身份验证(取决于我用来保存会话信息的内容).
当用户只打开一个站点的选项卡/窗口时,一切看起来都很酷 - 当拥有更多并使用session_regenerate_id()时,在nodejs中用户使用另一个sessionid键进行身份验证,因此除了他们连接的套接字ID之外,我无法区分两个选项卡用.当用户注销时,他不应该在任何选项卡上收到任何消息(因为他已经从该浏览器的每个选项卡/窗口中注销).所以在注销消息(在注销PHP之前从浏览器发送的东西)我应该删除连接到授权用户ID的所有套接字连接.但是,如果用户登录两个设备(例如PC浏览器和ipad safaris),该怎么办?在一台设备上注销后,他不应该在他注销的设备上收到任何消息,而不是在每台设备上.如何区分socket.io中不同设备/浏览器的连接?当然不使用session_regenerate_id()会很有效,但如果我真的想使用这个功能,我该怎么办?
我遇到的另一个问题是安全问题(甚至问题).让我们假设应用程序中的授权用户可以看到页面example.com/user1(这是user1的新闻源),但是看不到example.com/user2(例如,他没有权限查看它).我希望socket.io在用户访问example.com/user1时向浏览器发送更新消息,当用户在example.com/user2站点上时当然不发送.在socket.io端,我可以读取引用地址(因此,当用户在user2站点上时,他没有得到任何socket.io连接).问题是:我应该将引用地址与node.js端的经过身份验证的用户的权限进行比较吗?或者,node.js端的referer值是否安全?在node.js端添加另一个db检查会降低它的速度(因为几乎每个请求都应该在两端进行相同的数据库检查 - PHP和node.js).
或者也许socket.io + PHP应用程序的整个概念以我提出的方式工作是错误的?
更新
我想我找到了一种方法来省略第一个问题的问题 - 基本上我只是添加另一个cookie(除了PHPSESSID)fe.名为NODESESSID,我在用户被授权时生成(fe.使用uniqid()).现在,node.js端的授权正在比较PHPSESSID和NODESESSID(两者必须匹配).现在,当用户注销时,他将消息注销传递给socket.io,socket.io断开所有使用NODESESSID的套接字.这就像连接重新生成会话ID的好处而不是重新生成会话ID(但不容易受到会话固定的影响,不是吗?).
我有UIViewController里面有一个自定义的UIView(让我们称之为VC和按钮).当触摸按钮时,它的边界和中心随动画变化(它变得更大,并提供一些选项供选择,在选择它后调整后).我想知道如何"检测"(并忽略该触摸的默认动作)按钮外的触摸(只是为了"隐藏"按钮,特别是使按钮调整大小为默认的较小尺寸).
有没有通用的方法可以做到这一点?VC在其视图中有很多对象(表视图,按钮,文本字段,使用quartzcore制作的自定义图表等),我是否需要在按钮的"大模式"期间阻止所有这些元素的"交互性"?
我在一个视图控制器上有两个UITableView(视图控制器是它们的委托).其中一个将取决于scrollViewWillEndDragging:withVelocity:targetContentOffset :(我想做某种自定义分页).另一个将pagingEnabled属性设置为YES,当我第一次尝试滚动时,XCode给了我警告
2012-09-07 16:46:39.672 test[17393:707] Stop offset can not be modified for paging scroll views
Run Code Online (Sandbox Code Playgroud)
即使该方法的代码目前是:
-(void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
{
return;
}
Run Code Online (Sandbox Code Playgroud)
当我删除方法scrollViewWillEndDragging:withVelocity:targetContentOffset:一切似乎都没问题.我是否需要尝试创建另一个委托(没有该方法)并使用分页委托制作UITableView,或者我应该不担心?
ios ×3
objective-c ×2
cocoa-touch ×1
ios6 ×1
node.js ×1
php ×1
security ×1
socket.io ×1
touch ×1
uiscrollview ×1
uitableview ×1
uiview ×1