小编Rit*_*its的帖子

块而不是performSelector:withObject:afterDelay:

我经常想在将来几微秒内执行一些代码.现在,我这样解决:

- (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)

那对我来说真的很有用.

iphone cocoa-touch objective-c ios objective-c-blocks

87
推荐指数
5
解决办法
4万
查看次数

"'字段列表'中的未知列",但列确实存在

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'

有人有想法吗?

mysql sql innodb insert

15
推荐指数
3
解决办法
5万
查看次数

关于按位运算符的一些问题

我今天读到了关于按位运算符的内容,它们对我来说似乎很方便.我也注意到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)

但我怎么..

  1. 星期四?
  2. 星期四禁用?
  3. 周四切换?
  4. 启用所有?
  5. 禁用所有?

谢谢.

iphone cocoa-touch bit-manipulation objective-c ios

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

[UIView beginAnimations:context:]和[UIView animateWithDuration:animations:]之间的区别

在我看来,这两个类方法是不可互换的.我有一个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 不会被调用.这里发生了什么?

iphone cocoa-touch core-animation objective-c uiview

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

在哪里初始化自定义UIView,在Interface Builder中实例化?

我有一个UIView的子类,它在XIB文件中实例化.我需要它做一些初始化(设置一些变量和创建子视图).

但是,我并不总是通过Interface Builder实例化此视图.我也是以编程方式完成的.在这两种情况下,初始化都需要相同.

我指定的初始化程序是initWithValues:.

问题是; 我在哪里进行初始化?

由于我必须在两个不同的位置执行它,我想我需要在一个单独的initialize方法(或类似的东西)中重构它,并从中调用它initWithValues:.

不过从IB加载时,无论是initWithCoder:和awakeFromNib被调用.我必须从哪个方法打电话initialize?或者我必须打电话initWithValues:给initWithCoder:什么都不做awakeFromNib?

iphone cocoa-touch objective-c uikit

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

sectionNameKeyPath与NSFetchedResultsController无法正常工作

我有一个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

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

为什么我不能在switch语句中使用NSInteger?

为什么这不起作用:

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等具有可变值.

iphone cocoa-touch objective-c switch-statement nsinteger

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

使用不同的值更新多个行

我在我的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.有没有办法可以在同一个查询中同时更新同时获得相同值的所有行?或者,还有另一种方法可以优化吗?

mysql sql sql-update

7
推荐指数
2
解决办法
8317
查看次数

什么时候dispatch_release()?

我对GCD很新,并试图找到答案.假设我有以下代码:

dispatch_queue_t queue = dispatch_queue_create("queue", NULL);
dispatch_async(queue, ^{
    // do some stuff
});
Run Code Online (Sandbox Code Playgroud)

我应该在代码中的哪个位置释放队列?街区内外?

iphone memory-management objective-c grand-central-dispatch

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

使用递归块时EXC_BAD_ACCESS

我正在尝试使用块创建递归.它工作了一段时间,但最终它崩溃并给我一个糟糕的访问异常.这是我的代码:

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 recursion cocoa-touch objective-c objective-c-blocks

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