在某些多点触控"屏幕绘图"代码的维护中,我遇到了一个错误,相对于如何在touchesBegan:withEvent:,touchesMoved:withEvent:和touchesEnded:withEvent:之间设置触摸实例的引用.
代码使用NSDictionary实例来存储touchesBegan:withEvent:中的touches引用,如下所示:
for (UITouch *touch in touches]) {
NSValue *touchValue = [NSValue valueWithPointer:touch];
NSString *key = [NSString stringWithFormat:@"%@", touchValue];
[myTouches setValue:squiggle forKey:key];
}
Run Code Online (Sandbox Code Playgroud)
并以touchesEnded:withEvent检索它们:这样:
for (UITouch *touch in touches) {
NSValue *touchValue = [NSValue valueWithPointer:touch];
NSString *key = [NSString stringWithFormat:@"%@", touchValue];
NSObject *valueFromDictionary = [myTouches valueForKey:key];
[myTouches removeObjectForKey:key];
}
Run Code Online (Sandbox Code Playgroud)
在最后一段代码中,valueFromDictionary偶尔会出现nil,因为字典不知道密钥.偶尔,我的意思是大约1%的时间.
现在上下文已经确定,我的问题是:
知道为什么这个代码有问题吗?我不确定它为什么不起作用,特别是因为错误的频率非常低
来自Apple的一些文档指出,使用UITouch对象的地址作为键是个好主意:但它意味着使用NSValue*对象而不是NSString*对象(因此使用CFDictionaryRef而不是NSDictionary,因为UITouch没有实现复制协议).为了能够使用NSDictionary,如何存储地址的NSString表示而不是NSValue本身是不是一个简单的解决方案? 更新:Apple更新了页面并删除了通过NSString存储UITouch的示例,并且只提到了非对象的CFDictionaryRef解决方案.
我担心我离C和指针很远,需要帮助才能理解这段代码中存在错误的原因.
我想在iOS应用程序中集成一个完整的HTML框架(即HTML/CSS/JavaScript),并使负责运行HTML内容的UIWebView能够与其余的原生Objective-C源代码进行通信.
方向1:从UI-View内的Objective-C到HTML
使其余源代码向HTML内容发送消息的方法非常简单:我可以调用stringByEvaluatingJavaScriptFromString:Objective-C方面并以正确的方式实现JavaScript方法.
方向2:从UIWebView中的HTML到Objective-C
这是我无法弄清楚的方式.到目前为止,我唯一的想法是让我的应用程序成为本地Web服务器并向其发送HTML请求.但我不知道怎么做,虽然我认为它可能是骨头,因为我相信诸如Things,VLC或1Password之类的应用可能会使用这种功能.
任何想要使这个方向2工作或任何新的观点,以使HTML内容中的事件发送到Objective-C代码是值得欢迎的.
我想使用html5标签在Android浏览器中播放音频.它在iPhone浏览器中运行良好,但在Android中无效.我正在使用Android虚拟设备4.0.3. <audio>
有谁知道为什么?
Android来源:
webView.loadUrl("file:///android_asset/www/test.html");
HTML文件:
<audio controls="controls" format="mp3">
<source src="achievement.mp3" />
</audio>
Run Code Online (Sandbox Code Playgroud)
(我听不到音频<embed>和<object>标签)
我的视图控制器通过该presentViewController:animated:completion:方法呈现视图.视图很好.
然后我忽略了这个视图并重新呈现它并得到以下崩溃:
*** -[WebBrowser isKindOfClass:]: message sent to deallocated instance 0x1f640ac0
Run Code Online (Sandbox Code Playgroud)
我的代码使用的是ARC.这是我的WebBrowser类的代码,一个简单的嵌入式浏览器.
WebBrowser.h:
@interface WebBrowser : ITViewController <UIWebViewDelegate, UIAlertViewDelegate>
@property (nonatomic, strong) NSString *URL;
@property (nonatomic, weak) IBOutlet UIWebView *webView;
@property (nonatomic, weak) IBOutlet UIActivityIndicatorView *spinner;
- (id)initWithURL:(NSString *)URL;
- (IBAction)dismissView:(id)sender;
@end
Run Code Online (Sandbox Code Playgroud)
WebBrowser.m:
@implementation WebBrowser
- (id)initWithURL:(NSString *)URL_ {
self = [super initWithNibName:@"MyNib" bundle:nil];
if (self) {
self.URL = URL_;
}
return self;
}
- (void)viewDidLoad {
[super viewDidLoad];
self.webView.delegate = self;
if (self.URL) {
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL …Run Code Online (Sandbox Code Playgroud) 我正在使用Sidekiq进行Rails 4.1应用程序的后台操作.
当我输入Ctrl+ C关闭Sidekiq时,Sidekiq捕获信号但似乎在最后一个日志行后冻结:
^C2014-09-18T16:17:19.194Z 20686 TID-ovwtinh0g INFO: Shutting down
2014-09-18T16:17:21.041Z 20686 TID-ovwtixflc INFO: Shutting down 5 quiet workers
Run Code Online (Sandbox Code Playgroud)
因此,我需要另一个终端窗口,我需要输入:
bundle exec sidekiqctl stop pidfile
Run Code Online (Sandbox Code Playgroud)
这真的很不方便(大约需要8秒)而且我找不到为什么Sidekiq不会用Ctrl+ 正常停止C.
我的担心是:
我正在尝试使用不同的预处理宏启动xcodebuild.
我试过了 :
xcodebuild -scheme myscheme \
-configuration "Archive" \
-sdk "iphoneos5.1"
archive \
CONFIGURATION_BUILD_DIR=../build \
GCC_PREPROCESSOR_DEFINITIONS=ADHOC
Run Code Online (Sandbox Code Playgroud)
但由于未使用预处理器,我收到了编译错误:
我无法使用编译命令的-D标志看到它
但它显示在脚本的开头
Build settings from command line:
CONFIGURATION_BUILD_DIR = ../build
GCC_PREPROCESSOR_DEFINITIONS = ADHOC
SDKROOT = iphoneos5.1
Run Code Online (Sandbox Code Playgroud)
编译错误原点的代码是:
#ifdef ADHOC
NSUInteger toto = 0;
#endif
Run Code Online (Sandbox Code Playgroud)
但我得到一个use of undeclared identifier错误toto
ps:如果我在Xcode中定义预处理器宏,则使用这些值,覆盖我的,并完成归档.但我确实希望根据不同的预处理器定义进行多次构建(这听起来比创建新的构建配置或方案更好)
当我从后台转换到前台时开始发出请求后,我的应用程序出现了相当多的网络错误。
\n错误看起来像这样:
\nError Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." UserInfo={NSUnderlyingError=0x2808e85a0 {Error Domain=kCFErrorDomainCFNetwork Code=-1005 "(null)" UserInfo={NSErrorPeerAddressKey=<CFData 0x282550410 [0x1f80cb728]>{length = 16, capacity = 16, bytes = 0x10021068c0a8010a0000000000000000}, _kCFStreamErrorCodeKey=-4, _kCFStreamErrorDomainKey=4}}, NSErrorFailingURLStringKey=http://192.168.1.10:4200/api/users/sessions, NSErrorFailingURLKey=http://192.168.1.10:4200/api/users/sessions, _kCFStreamErrorDomainKey=4, _kCFStreamErrorCodeKey=-4, NSLocalizedDescription=The network connection was lost.}\nRun Code Online (Sandbox Code Playgroud)\n该代码是从我的应用程序的委托触发的:
\n func applicationWillEnterForeground(_: UIApplication) {\n coordinator?.handleWillEnterForeground()\n }\nRun Code Online (Sandbox Code Playgroud)\n从本文档来看,现阶段应允许网络请求:
\n\n\n在启动时,系统会在非活动状态下启动您的应用程序,然后将其转换到前台。使用您的 app\xe2\x80\x99s 启动时方法来执行当时所需的任何工作。对于位于后台的应用程序,UIKit 通过调用以下方法之一将您的应用程序移至非活动状态:
\n\n
\n- 对于支持场景的应用程序 \xe2\x80\x94 相应场景委托对象的 sceneWillEnterForeground(_:) 方法。
\n- 对于所有其他应用程序 \xe2\x80\x94 applicationWillEnterForeground(_:) 方法。
\n从后台过渡到前台时,使用这些方法从磁盘加载资源和从网络获取数据。
\n
而且:
\n我正在使用命令行git和Kaleidoscope来执行我的代码审查.当我将分支合并到另一个分支并输入时
git difftool
Run Code Online (Sandbox Code Playgroud)
Kaleidoscope仅显示"未提交以进行提交"的更改,并且不显示"未合并路径"或"已更改为已提交".
命令行显示其余内容.
知道为什么吗?
这是我的〜/ .gitconfig
[user]
name = Dirty Henry
email = dirty@henry.com
[core]
excludesfile = /Users/dirty/.gitignore_global
editor = mate
[difftool "Kaleidoscope"]
cmd = ksdiff-wrapper git \"$LOCAL\" \"$REMOTE\"
[mergetool "sourcetree"]
cmd = /Applications/SourceTree.app/Contents/Resources/opendiff-w.sh \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$MERGED\"
trustExitCode = true
[diff]
tool = Kaleidoscope
[credential]
helper = osxkeychain
[difftool]
prompt = false
Run Code Online (Sandbox Code Playgroud) 我的iOS应用程序需要有权访问图片才能正常运行.
当我发现以下情况时,我正在测试我的应用如何响应隐私设置中的更改:每次我转到设置应用并更改我的应用的隐私设置(打开或关闭),我的应用程序被杀死没有任何警告.
我在设备的控制台中找到了这些日志:
Apr 8 15:01:50 iPad Preferences[5924] <Warning>: ########### Quitting application (xxx) in response to privacy settings change.
Apr 8 15:01:50 iPad com.apple.launchd[1] (UIKitApplication:xxx[0xc7cb][6039]) <Notice>: (UIKitApplication:com.edupad.itoochdev[0xc7cb]) Exited: Killed: 9
Apr 8 15:01:50 iPad backboardd[30] <Warning>: Application 'UIKitApplication:xxx[0xc7cb]' exited abnormally with signal 9: Killed: 9
Run Code Online (Sandbox Code Playgroud)
虽然我applicationWillTerminate:在我的应用程序委托中实现,但在应用程序被杀之前似乎没有被调用.
我找不到任何相关的文档,说明在应用程序被杀之前我应该实现什么来获取通知.我有什么想法可以解决这个问题吗?
PS 1:我知道我可以实现,applicationDidEnterBackground:但我想在案例中提供不同的用户体验(A)用户只需快速切换到设置应用程序以更改隐私设置或(B)用户想继续前进并赢得'暂时回到应用程序
PS 2:如果您正在测试此类事情,请不要使用通过Xcode启动的应用程序,否则您将使用sigkill崩溃.
我正在检查.lazy高阶函数,并且得到了一些与flatMap函数相关的有趣编译错误(可能还有其他函数)
例子
let array = [1, 2, 3, 4, 5, 6]
array
.flatMap {
print("DD")
return $0 // Cannot convert return expression of type 'Int' to return type 'String?'
}
.forEach {
print("SS")
print($0)
}
评论一下
array
.flatMap {
// print("DD")
return $0
}
.forEach {
print("SS")
print($0)
}
一切正常......更有趣的例子
array
.flatMap {
let z = $0
return $0 // Or return z - all is the same "Cannot convert return expression of type 'Int' to return type … ios ×6
html5 ×2
swift ×2
android ×1
appdelegate ×1
arrays ×1
audio ×1
browser ×1
diff ×1
flatmap ×1
git ×1
html ×1
ios5 ×1
ios6 ×1
mobile ×1
mp3 ×1
multi-touch ×1
pointers ×1
postgresql ×1
privacy ×1
reference ×1
settings ×1
sidekiq ×1
touchesbegan ×1
uiwebview ×1
xcode4 ×1
xcode4.3 ×1
xcodebuild ×1