小编Dir*_*nry的帖子

如何在touchesBegan:和touchesEnded:?之间以一致的方式跟踪触摸

在某些多点触控"屏幕绘图"代码的维护中,我遇到了一个错误,相对于如何在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%的时间.

现在上下文已经确定,我的问题是:

  1. 知道为什么这个代码有问题吗?我不确定它为什么不起作用,特别是因为错误的频率非常低

  2. 来自Apple的一些文档指出,使用UITouch对象的地址作为键是个好主意:但它意味着使用NSValue*对象而不是NSString*对象(因此使用CFDictionaryRef而不是NSDictionary,因为UITouch没有实现复制协议).为了能够使用NSDictionary,如何存储地址的NSString表示而不是NSValue本身是不是一个简单的解决方案? 更新:Apple更新了页面并删除了通过NSString存储UITouch的示例,并且只提到了非对象的CFDictionaryRef解决方案.

我担心我离C和指针很远,需要帮助才能理解这段代码中存在错误的原因.

pointers reference multi-touch touchesbegan ios

9
推荐指数
2
解决办法
3970
查看次数

如何将UIWebView中运行的HTML事件发送到本机Objective-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代码是值得欢迎的.

html mobile html5 uiwebview ios

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

在Android浏览器中使用HTML5播放音频

我想使用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>标签)

browser audio html5 mp3 android

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

是对PRESViewController的ARC内存管理:动画:完成:在iOS 6.x中被破坏了吗?

我的视图控制器通过该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)

modalviewcontroller ios ios5 ios6

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

Ctrl + C后Sidekiq不会关闭

我正在使用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.

我的担心是:

  • Rails 4.1.5
  • Sidekiq 3.2.4
  • Postgresql DB

postgresql ruby-on-rails sidekiq ruby-on-rails-4

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

xcodebuild命令行忽略GCC_PREPROCESSOR_DEFINITIONS

我正在尝试使用不同的预处理宏启动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中定义预处理器宏,则使用这些值,覆盖我的,并完成归档.但我确实希望根据不同的预处理器定义进行多次构建(这听起来比创建新的构建配置或方案更好)

xcodebuild ios xcode4 xcode4.3

7
推荐指数
1
解决办法
2938
查看次数

当我的应用程序进入前台时运行的请求失败,并显示“网络连接丢失”。

当我从后台转换到前台时开始发出请求后,我的应用程序出现了相当多的网络错误。

\n

错误看起来像这样:

\n
Error 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.}\n
Run Code Online (Sandbox Code Playgroud)\n

该代码是从我的应用程序的委托触发的:

\n
    func applicationWillEnterForeground(_: UIApplication) {\n        coordinator?.handleWillEnterForeground()\n    }\n
Run Code Online (Sandbox Code Playgroud)\n

本文档来看,现阶段应允许网络请求:

\n
\n

在启动时,系统会在非活动状态下启动您的应用程序,然后将其转换到前台。使用您的 app\xe2\x80\x99s 启动时方法来执行当时所需的任何工作。对于位于后台的应用程序,UIKit 通过调用以下方法之一将您的应用程序移至非活动状态:

\n
    \n
  • 对于支持场景的应用程序 \xe2\x80\x94 相应场景委托对象的 sceneWillEnterForeground(_:) 方法。
  • \n
  • 对于所有其他应用程序 \xe2\x80\x94 applicationWillEnterForeground(_:) 方法。
  • \n
\n

从后台过渡到前台时,使用这些方法从磁盘加载资源和从网络获取数据

\n
\n

而且:

\n
    \n …

ios appdelegate swift

7
推荐指数
1
解决办法
2321
查看次数

如何让我的git集成Kaleidoscope显示即将提交的所有文件?

我正在使用命令行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)

git diff

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

有没有办法知道我的iOS应用程序被隐私设置更改杀死?

我的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崩溃.

settings privacy uiapplicationdelegate ios

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

在flatMap中"无法转换返回表达式",其中包含无意义的表达式

我正在检查.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 …

arrays flatmap swift

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