小编rid*_*rid的帖子

我的Objective-C异常不会导致我的应用程序终止,但Apple会这样做

在我的iOS(iPhone/cocos2d)项目中,我发现我自己抛出的异常不会导致应用程序终止(它们只会导致当前函数退出,这会导致奇怪的半冻结行为).例如,以下代码导致崩溃:

NSArray* testArray = [NSArray arrayWithObjects:@"One", @"Two", @"Three", nil];
[testArray objectAtIndex:400];
Run Code Online (Sandbox Code Playgroud)

当我运行该代码时,我在控制台中得到以下内容,正如我所期望的那样:

2011-06-07 12:55:20.421 mansion-iphone[38184:207] *** Terminating app due to
    uncaught exception 'NSRangeException', reason: '*** -[NSArray
    objectAtIndex:]: index 400 beyond bounds [0 .. 2]'
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试引发异常(例如来自断言),除非我启用了"停止Objective-C异常",否则我会得到半冻结.这对我来说很好,但是当我的测试人员报告问题时会导致问题 - 因为应用程序没有崩溃,他们没有崩溃日志来发送给我.这是一个不起作用的异常示例:

NSException* e = [NSException exceptionWithName:NSInternalInconsistencyException 
        reason:[NSString stringWithFormat:@"%s %@", __PRETTY_FUNCTION__,
        [NSString stringWithFormat:@"Invalid argument"]] userInfo:nil];
[e raise];
Run Code Online (Sandbox Code Playgroud)

关闭"停止Objective-C异常",这甚至不会向控制台发出消息 - 使用NSAssert会给我一个控制台消息,但仍然没有停止.因此,似乎Cocoa类生成的异常行为正确,但源自我的代码的异常不是.

我检查了我的代码和cocos2d,但没有发现任何似乎阻止异常的@try块; 有谁有想法?

iphone exception objective-c ios

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

计数字节和总字节数不同

我正在编写一个Android应用程序,它将资产中的文件复制到设备驱动器上的一个文件中(没有权限问题,字节从资产到驱动器).我需要复制的文件大于1 MB,因此我将其拆分为多个文件,然后将其复制为:

try {
    out = new FileOutputStream(destination);
    for (InputStream file : files /* InputStreams from assets */) {
        copyFile(file);
        file.close();
    }
    out.close();
    System.out.println(bytesCopied); // shows 8716288
    System.out.println(new File(destination).length()); // shows 8749056
} catch (IOException e) {
    Log.e("ERROR", "Cannot copy file.");
    return;
}
Run Code Online (Sandbox Code Playgroud)

然后,copyFile()方法:

private void copyFile(InputStream file) throws IOException {
    byte[] buffer = new byte[16384];
    int length;
    while ((length = file.read(buffer)) > 0) {
        out.write(buffer);
        bytesCopied += length;
        out.flush();
    }
}
Run Code Online (Sandbox Code Playgroud)

目标文件应包含的正确字节数是8716288(这是我查看原始文件时获得的,如果我计算Android应用程序中的写入字节数),但new File(destination).length()显示为8749056.

我究竟做错了什么?

java android

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

关于HTML/CSS中的文本的问题

我知道对此的修复可能相当容易,但我如何才能获得一行HTML看起来像这样:

22 West Washngton St.
Northbrook,IL 39492

代替:

西华盛顿街22号

Northbrook,IL 39492

基本上,我如何在我的文本行之间消除这个空间?我目前<p>在两个单独的标签上都使用标签.如果我将它们放在同一个<p>标签中,它们只是排列在一起.

html css

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

在PHP中删除一个类

是否可以在定义后删除PHP中的类?例如:

class Test { }

<something>('Test');
$test = new Test(); // <- not working because there is no class "Test"
Run Code Online (Sandbox Code Playgroud)

php reflection

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

使用[NSString stringWithFormat:]后可以释放C字符串吗?

我可以将它传递给后释放C字符串[NSString stringWithFormat:]%s?例如:

char *str = malloc(...);
// ... populate str ...
NSString *message = [NSString stringWithFormat:@"[%s]", str];
free(str); // should this be here, or after I'm done with message?
Run Code Online (Sandbox Code Playgroud)

c objective-c nsstring

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

MySQL多个查询或使用IN(value1,value2,value3)

简短介绍:

我有一个表t1( id(mediumint), string(varchar(45) )都属于主键.

我需要在这个表中找到5个字符串,比方说.这个表就像5M +行.

什么会更快?

  1. 一个查询使用IN():

    SELECT id, string FROM t1 WHERE string IN (value1,value2,...,value5)
    
    Run Code Online (Sandbox Code Playgroud)

    要么

  2. 五个查询,每个值一个:

    SELECT id, string FROM t1 WHERE string = value1
    SELECT id, string FROM t1 WHERE string = value2
    '
    '
    SELECT id, string FROM t1 WHERE string = value5
    
    Run Code Online (Sandbox Code Playgroud)

应用程序服务器和数据库服务器将位于同一网络(100Mbit或1Gbit,尚未确定),而不是在同一台计算机上.

mysql performance

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

在节标题和单元格之间创建空格

我有一个带有一个节头的分组表视图.如何在节标题和第一个tableview单元格之间创建空格?

uitableview ios

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

根据兄弟的高度设置div的高度

我有像这样的HTML元素.

<div id="A">
    <div id="B"></div>
    <div id="C"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

"B"和"C"都有子元素.对于"B",其高度是动态的,基于其内容.现在,我想将"C"的高度设置为"A"的高度减去"B"的高度.有谁知道如何通过CSS做到这一点?

css

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

我可以保护原生JavaScript函数吗

有什么方法可以防止用户覆盖本机功能?

例:

var getRand;
(function(){
  'use strict';
  getRand = function(){
    return Math.random();
  }
})();

getRand(); //gives a nice random number
Run Code Online (Sandbox Code Playgroud)

页面加载后,在控制台中覆盖。

Math.random = function (){ return 0 };

getRand(); //gives 0 :(
Run Code Online (Sandbox Code Playgroud)

有什么方法可以防止本机函数被覆盖?也许使用CSP或密封对象...这甚至可能吗?

javascript security native

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

Elixir 中函数参数中的匹配运算符?

我正在浏览 elixir 项目代码库,遇到以下问题,请帮我看看匹配操作在函数参数中正在做什么?

{ result, errors } = validate(schema, data, "", data)
Run Code Online (Sandbox Code Playgroud)
def validate(root = %{ custom: validator }, data, path, full_data) when is_function(validator) do
  { result, errors } = if Map.has_key?(root, :type), do: validate( Map.drop(root, [:custom]) , data, path ), else: { data, [] }
  case validator.(full_data, result, path) do
    { :ok, value } -> { value, errors }
    { :error, error } -> { result, errors ++ [ %{ param: path, code: :validation_error, message: error  } ]  } …
Run Code Online (Sandbox Code Playgroud)

elixir

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