我有一些相当复杂的规则来移动行中的行UITableView.每个部分有不确定数量的部分和行,并且根据各种规则,行可以在用户的部分内或部分之间移动到特定的其他位置.
所有数据更新,一切正常.但偶尔,在移动一行之后,应用程序将退出并突然出现一个空白区域,应该显示一行.
我正在使用:
- (NSIndexPath *)tableView:(UITableView *)tableView
targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath
Run Code Online (Sandbox Code Playgroud)
指定允许用户根据单元格的位置拖动行的位置.98%的工作时间.但在某些情况下,当只允许用户在各部分之间拖动时(无法对部分内的行重新排序)会出现此错误,然后在没有行的区域上滚动浏览器后应用程序崩溃.
抛出的异常非常无用:
由于未捕获的异常'NSRangeException'而终止应用程序,原因:'*** - [NSCFArray objectAtIndex:]:index(6)超出边界(6)
我的代码都没有在堆栈中.最后一个特定于UITableView的方法是
-[UITableView(UITableViewInternal) _visibleCellForGlobalRow:]
有人看过这个问题之前发生过吗?有任何想法吗?
我正在尝试Java中的泛型,并想到了这个例子.
如果我有ClassA<T>,我可以用引用具体类的子类覆盖它,例如ClassB extends ClassA<String>,然后ClassA使用T的任何地方,ClassB可以使用String.
现在,忽略了以前的ClassA和ClassB,如果我有一个抽象的ClassA,它有一个通用的方法:
public <T> void doSomething(T data);
Run Code Online (Sandbox Code Playgroud)
有没有什么方法可以ClassB用一个具体的类覆盖它,类似于前面的例子?我想出了一些有用的东西,即参数化类和方法,但我想知道是否有另一种方法.
class ClassA<T> {
public void doSomething(T data) {};
}
Run Code Online (Sandbox Code Playgroud)
我不想将参数放在类中的原因是因为它只有一个方法可以对该类型执行任何操作,而某些子类甚至可能不想在该方法中执行任何操作,因此我不需要放置如果它不打算使用它,则该类中的参数.
注意:所有子类ClassA都是匿名类,因此增加了乐趣.
我正在为Blackberry编写一个最初在标准J2ME中实现的应用程序.使用Connector.open("socket://...:80/...")而不是使用完成网络连接http://
现在,我已经使用这两种方法实现了连接,似乎有时候,套接字方法响应更快,有时它根本不起作用.这两者之间有显着差异吗?我想要实现的主要是从连接的响应能力来获得平滑的进度条.
我仍然不确定我是否完全了解这个特殊情况应如何解决.因此,如果我想声明一个不会改变的NSStrings数组,这是正确的吗?
static NSString * const strings[] = {@"String 1", @"String 2", ...};
Run Code Online (Sandbox Code Playgroud)
有static必要吗?(它做了什么?)我错过了一个额外的const地方吗?这里有太多的地方了!尔加!我做错了,还是我只是偏执狂?
这个 XNA方法有两个矩阵相乘有什么好处吗?
public static void Multiply (
ref Matrix matrix1,
ref Matrix matrix2,
out Matrix result
)
Run Code Online (Sandbox Code Playgroud)
为什么结果是out参数而不是返回?使用简单的返回值是否有任何速度或内存优势?考虑到Matrix是一个结构,这与它有什么关系吗?我可以理解为什么matrix1和matrix2是ref变量,所以它不必复制它们,但我不明白为什么第三个是out参数而不是return或ref变量.
我不确定问这个问题的最好方法,所以我先从一个例子开始:
public static void ConvertPoint(ref Point point, View fromView, View toView) {
//Convert Point
}
Run Code Online (Sandbox Code Playgroud)
这个调用是递归的.你传入一个点,它相对于它fromView是相对的toView(只要一个是另一个的祖先).
该调用是递归的,一次将该点转换为一个级别.我知道,可变结构是坏的,但我使用可变点的原因是我只需要创建一个单点并将其传递给递归调用,这就是为什么我使用ref.这是正确的方法,还是使用out参数更好,或者只是声明方法返回一个点?
在这些情况下,我不太熟悉如何处理结构体而不是类.这是从Java移植的代码,其中显然必须是一个类,因此有意义的是反复使用相同的临时点而不是创建一个必须在每次调用时被垃圾收集的新点.
这可能是一个令人困惑的问题,并且为了更多的混乱而堆积起来,当我在它时,我应该保留一个临时静态Point实例以进行快速转换,或者只要在调用此方法时创建新点就这么简单(它被称为很多)?
例:
$data = "Test Data\x00\x00";
echo strlen($data);
$key = "mykey";
$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, MD5($key, true), $data, MCRYPT_MODE_ECB);
echo strlen($encrypted);
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, MD5($key, true), $encrypted, MCRYPT_MODE_ECB);
echo strlen($decrypted);
$newData = rtrim($decrypted,"\x00");
echo strlen($newData);
Run Code Online (Sandbox Code Playgroud)
输出:
11
16
16
9 <-- I want 11 here
Run Code Online (Sandbox Code Playgroud)
那么,有没有办法解密在加密之前可能已经为空填充的数据,并获得正确的长度数据?
我在很多地方读过你应该像这样初始化Objective-C对象:
- (id) init {
if (self = [super init]) {
....
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
因为super的init方法可能会从当前返回一个单独的对象self.
现在我正在尝试做这样的事情,而且我不确定我是否正确,相对于保留和释放应该如何工作:
- (id) init:(int)idx {
id obj = [Cache findSelf:idx];
if (obj) {
[self release];
self = [obj retain];
} else {
self = [self doLoad];
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
我很好奇,大多如果这是应该做的保留和释放的正确方法self和obj.有没有更好的办法?
我们正在创建一个沉浸式应用程序,需要具有与a类似的行为UIAlertView,但我们不希望它看起来像系统对话框,我们想要使用我们自己的图形.我完成了很大一部分工作,但是我遇到了一些障碍:
如何让UIView显示在状态栏上方(这样我可以变暗,就像UIAlertView一样)?这可能吗?我已将其添加到窗口中,但它仍显示在状态栏下方.
如何将其显示为部分透明但文本仍然完全不透明?我希望它显示类似于a UIAlertView它应该是半透明的,但是如果我将alpha设置为.8,那么也会减少子视图的alpha.如果我只减少背景图像的alpha,则按钮显示为不透明.如果我减少背景图像和按钮的alpha,则按钮看起来不像是嵌入在背景图像中.我非常希望不必为每个嵌入式按钮排列创建不同的图像
编辑:我还没有找到状态栏问题的解决方案,但我注意到标准的UIAlertView显示在自己的UIWindow中,当我调查它时,我找到了windowLevel属性:
const UIWindowLevel UIWindowLevelNormal;
const UIWindowLevel UIWindowLevelAlert;
const UIWindowLevel UIWindowLevelStatusBar;
Run Code Online (Sandbox Code Playgroud)
使用我自己的UIWindow UIWindowLevelAlert仍然没有让它显示在状态栏上方.我没试过UIWindowLevelStatusBar.
我已经多次尝试过了解const关键字,但它对我来说并不合适.
我想声明一个无法更改的对象,也就是说,一个常量对象.例如,在.h文件中:
extern MyClass *use_this_object;
Run Code Online (Sandbox Code Playgroud)
并在.m文件中:
MyClass *use_this_object;
+ (void) Initialize {
use_this_object = [MyClass new];
}
Run Code Online (Sandbox Code Playgroud)
现在,我可以在哪里放置一个const,以便其他类可以访问use_this_object但不能修改它(假设MyClass是不可变的),而MyClass类可以初始化变量?
这甚至可能吗?或者我应该使用静态方法来检索常量而不是将其声明为extern?
objective-c ×4
c# ×2
cocoa-touch ×2
const ×2
iphone ×2
struct ×2
blackberry ×1
c ×1
encryption ×1
generics ×1
http ×1
ios ×1
java ×1
java-me ×1
performance ×1
php ×1
sockets ×1
static ×1
uitableview ×1
xna ×1