我经常想在将来几微秒内执行一些代码.现在,我这样解决:
- (void)someMethod
{
// some code
}
Run Code Online (Sandbox Code Playgroud)
还有这个:
[self performSelector:@selector(someMethod) withObject:nil afterDelay:0.1];
Run Code Online (Sandbox Code Playgroud)
它有效,但我每次都要创建一个新方法.是否可以使用块而不是这个?基本上我正在寻找一种方法,如:
[self performBlock:^{
// some code
} afterDelay:0.1];
Run Code Online (Sandbox Code Playgroud)
那对我来说真的很有用.
DROP TABLE IF EXISTS `transactions`;
CREATE TABLE `transactions` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`purchase_date` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `transactions` (`purchase_date`) VALUES (NULL)
Run Code Online (Sandbox Code Playgroud)
我在这段代码中已经解决了我的问题.当我运行它时,我收到错误:
[查询3中的错误]'字段列表'中的未知列'purchase_date'
有人有想法吗?
我今天读到了关于按位运算符的内容,它们对我来说似乎很方便.我也注意到Apple也使用它们,例如UIViewAutoresizing.
在我的应用程序中,我需要跟踪一周中的七天.每天都可以启用或禁用.我曾经有七个BOOL,但现在我正在尝试使用一个整数:
enum {
DaysMonday = 1 << 0,
DaysTuesday = 1 << 1,
DaysWednesday = 1 << 2,
DaysThursday = 1 << 3,
DaysFriday = 1 << 4,
DaysSaturday = 1 << 5,
DaysSunday = 1 << 6
};
typedef NSUInteger Days;
Run Code Online (Sandbox Code Playgroud)
我的问题是,我现在如何启用/禁用这些值?我知道我可以检查days特定日期的变量,如下所示:
if (days & DaysThursday) {
// thursday enabled
}
Run Code Online (Sandbox Code Playgroud)
但我怎么..
谢谢.
在我看来,这两个类方法是不可互换的.我有一个UIView的子视图,在touchesBegan方法中有以下代码:
if (!highlightView) {
UIImageView *tempImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Highlight"]];
self.highlightView = tempImageView;
[tempImageView release];
[self addSubview:highlightView];
}
highlightView.alpha = 0.0;
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDuration:0.5];
highlightView.alpha = 1.0;
[UIView commitAnimations];
Run Code Online (Sandbox Code Playgroud)
当我触摸按钮时,高光渐渐消失,就像你期望的那样.当我立即触摸时(在动画完成之前),我的touchesEnded被调用.这是我想要的行为.
但是现在,我已经成为了块的忠实粉丝,并试图尽可能地使用它们.所以我用这个取代了UIView动画代码:
[UIView animateWithDuration:0.2 animations:^{
highlightView.alpha = 1.0;
}];
Run Code Online (Sandbox Code Playgroud)
结果:亮点仍然淡入符合市场预期,但如果我摸了之前在动画结束后,我的touchesEnded并没有被调用.如果我润色后的动画结束后,我的touchesEnded 不会被调用.这里发生了什么?
我有一个UIView的子类,它在XIB文件中实例化.我需要它做一些初始化(设置一些变量和创建子视图).
但是,我并不总是通过Interface Builder实例化此视图.我也是以编程方式完成的.在这两种情况下,初始化都需要相同.
我指定的初始化程序是initWithValues:.
问题是; 我在哪里进行初始化?
由于我必须在两个不同的位置执行它,我想我需要在一个单独的initialize方法(或类似的东西)中重构它,并从中调用它initWithValues:.
不过从IB加载时,无论是initWithCoder:和awakeFromNib被调用.我必须从哪个方法打电话initialize?或者我必须打电话initWithValues:给initWithCoder:什么都不做awakeFromNib?
我有一个Order带有属性的实体paid,它是一个布尔值.
我想在a中显示所有订单UITableView,但我想将它们分为两部分:'未付款'和'付费'.所以我认为我只是给予"付费" sectionNameKeyPath,就像这样:
fetchedResultsController = [[NSFetchedResultsController alloc]
initWithFetchRequest:fetchRequest
managedObjectContext:managedObjectContext
sectionNameKeyPath:@"paid"
cacheName:nil];
Run Code Online (Sandbox Code Playgroud)
根据我的推理,这将导致两个部分,其中第一部分包含所有带有paid = NO(0)的订单,第二部分包含paid = YES(1).
但是当我添加一个带有paid = YES的新订单时,它会显示在第一部分中.当我签入获取结果控制器委托时,我可以看到创建了一个带有indexPath [0,0]的新记录!为什么不插入第二部分?
iphone cocoa-touch core-data objective-c nsfetchedresultscontroller
为什么这不起作用:
NSInteger sectionLocation = 0;
NSInteger sectionTitles = 1;
NSInteger sectionNotifications = 2;
switch (section) {
case sectionLocation:
//
break;
case sectionTitles:
//
break;
case sectionNotifications:
//
break;
default:
//
}
Run Code Online (Sandbox Code Playgroud)
我得到这个编译错误:
错误:case标签不会减少为整数常量
是不是可以像这样使用NSInteger?如果是这样,是否有另一种方法在switch语句中使用变量作为案例?sectionLocation等具有可变值.
我在我的MySQL数据库'用户'中得到了这个表.它有字段'id'和'value'.
现在,我想更新大量在这个表中有行单个 SQL查询,但许多行应该得到不同的值.目前,我正在使用这个:
UPDATE users
SET value = CASE id
WHEN 1 THEN 53
WHEN 2 THEN 65
WHEN 3 THEN 47
WHEN 4 THEN 53
WHEN 5 THEN 47
END
WHERE id IN (1,2,3,4,5)
Run Code Online (Sandbox Code Playgroud)
这有效.但我觉得我可以做一些优化,因为我只分配了3到4个不同的值.正如您所看到的,现在这些是47,53和65.有没有办法可以在同一个查询中同时更新同时获得相同值的所有行?或者,还有另一种方法可以优化吗?
我对GCD很新,并试图找到答案.假设我有以下代码:
dispatch_queue_t queue = dispatch_queue_create("queue", NULL);
dispatch_async(queue, ^{
// do some stuff
});
Run Code Online (Sandbox Code Playgroud)
我应该在代码中的哪个位置释放队列?街区内外?
我正在尝试使用块创建递归.它工作了一段时间,但最终它崩溃并给我一个糟糕的访问异常.这是我的代码:
BOOL (^Block)(Square *square, NSMutableArray *processedSquares) = ^(Square *square, NSMutableArray *processedSquares) {
[processedSquares addObject:square];
if (square.nuked) {
return YES; // Found a nuked square, immediately return
}
for (Square *adjacentSquare in square.adjacentSquares) {
if ([processedSquares containsObject:adjacentSquare]) {
continue; // Prevent infinite recursion
}
if (Block(adjacentSquare, processedSquares)) {
return YES;
}
}
return NO;
};
__block NSMutableArray *processedSquares = [NSMutableArray array];
BOOL foundNukedSquare = Block(square, processedSquares);
Run Code Online (Sandbox Code Playgroud)
说明:我有一个Square具有BOOL 的类nuked.它还有一个adjacentSquares包含其他Squares 的NSArray .
我想检查一个正方形或其中一个"连接"方块是否被核化.
该数组processedSquares是为了跟踪我检查过的方块,以防止无限递归.
当我运行它时,它正在执行此块的大量调用(如预期的那样).但在某些时候,它在最后一行崩溃并出现访问异常. …
iphone ×8
objective-c ×8
cocoa-touch ×7
ios ×2
mysql ×2
sql ×2
core-data ×1
innodb ×1
insert ×1
nsinteger ×1
recursion ×1
sql-update ×1
uikit ×1
uiview ×1