NSManagedObject
/ context.perform
阻止中删除context.performAndWait
?func delete(something: NSManagedObject, context: NSManagedObjectContext) {
context.performAndWait { //Is context.perform / context.performAndWait required to delete an object ?
context.delete(something)
}
}
context.perform
/ context.performAndWait
。答案 0 :(得分:0)
根据我的个人经验,使用 CREATE TRIGGER `update_contribution` AFTER INSERT ON `tasks`
FOR EACH ROW BEGIN
IF NOT EXISTS
(SELECT p_id ,d_id
FROM contribution
WHERE
p_id = NEW.p_id
AND
d_id = NEW.d_id)
THEN
SET @old_total_dev_hours = (SELECT SUM(total_hours)
FROM contribution
WHERE p_id = NEW.p_id
GROUP BY p_id);
SET @total_hours1 = (SELECT (total_hours)
FROM contribution
WHERE d_id = NEW.d_id AND p_id = NEW.p_id
);
SET @dev_con = @total_hours1/@old_total_dev_hours*100 ;
SET @total_hours = new.hours + new.overtime;
INSERT INTO contribution
( p_id,
d_id,
hours,
overtime,
total_hours,
contribution
)
VALUES
(NEW.p_id,
NEW.d_id,
NEW.hours,
NEW.overtime,
@total_hours ,
@dev_con
);
ELSE
UPDATE contribution
SET
hours = hours + NEW.hours ,
overtime = overtime + NEW.overtime,
total_hours = hours + overtime,
contribution = @dev_con
WHERE
p_id = NEW.p_id
AND
d_id = NEW.d_id;
END IF;
END
,因为它会等到操作完成。无论如何,这两种方法都将在它自己的线程上运行。(上下文的线程)。
执行( :)和performAndWait( :)确保块操作 在为上下文指定的队列上执行。表演( :) 方法立即返回,上下文执行块方法 在自己的线程上。使用performAndWait( :)方法,上下文 仍然在自己的线程上执行块方法,但方法 在块执行之前不会返回。
答案 1 :(得分:0)
在苹果文档中,人们正在谈论“......和等待”它的工作是同步的。 但是应该使用“...... andWait”来捕获执行块内的错误...
Moc.performBlock { for jsonArray中的jsonObject { 让你的=行动 } 做{ 尝试moc.save()
moc.performBlockAndWait { 做{try moc.save()} catch {fatalError(“无法保存上下文:(错误)”)} } } ...
如果你有不同的值/未使用的值,最好在里面做。在大多数情况下,ARC(内存管理)应该修复它。
你也应该在这里阅读: