标签: invalidation

如何正确使NSTimer无效

我有一个带有NSTimer的iPhone应用程序,名为pressTimer,每次有人触摸此按钮时都会消失.问题是他们触摸了很多按钮,我希望计时器在他们抬起手指时停止.所以我在我的.h中声明了pressTimer并在.m中合成它然后分配并在我创建的TouchDown动作上启动它.我在TouchUpInside操作上使用代码[pressTimer invalidate],该操作应该取消定时器,因为它是一个全局变量.这似乎取消计时器罚款,但后来当我去到实际跳闸定时器,程序完全冻结起来,虽然我没有得到任何的代码错误或警告.我是菜鸟,所以请不要太粗暴:0

更新:控制台日志 - 谢谢大家!

continue
2010-07-01 16:39:30.981 Clickkr[1573:307] -[__NSCFData invalidate]: unrecognized selector sent to instance 0x154b40
2010-07-01 16:39:30.999 Clickkr[1573:307] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFData invalidate]: unrecognized selector sent to instance 0x154b40'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x309a5fd3 __exceptionPreprocess + 114
    1   libobjc.A.dylib                     0x318b58a5 objc_exception_throw + 24
    2   CoreFoundation                      0x309a9a77 -[NSObject(NSObject) doesNotRecognizeSelector:] + 102
    3   CoreFoundation                      0x309a8f15 ___forwarding___ + 508
    4   CoreFoundation                      0x3093b680 _CF_forwarding_prep_0 + 48
    5   Clickkr                             0x00002b23 -[MyViewController addOne:] …
Run Code Online (Sandbox Code Playgroud)

iphone objective-c nstimer invalidation

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

NSTimer没有停止

我有一个带NSTimer *myTimer;变量的类.在某些时候我做:

myTimer = [NSTimer scheduledTimerWithTimeInterval:20 target:self selector:@selector(doStuff) userInfo:nil repeats: YES]; 
Run Code Online (Sandbox Code Playgroud)

另外,我有一个方法:

- (void)doStuff
{
  if(myTimer)
  {
    //do stuff
  }
}
Run Code Online (Sandbox Code Playgroud)

当课程通过以下方式发布时,我会停止计时器:

- (void)dealloc
{ 
 if (myTimer) { //if myTimer==nil it already has been stopped in the same way
  [myTimer invalidate];
  myTimer = nil;
 }
}
Run Code Online (Sandbox Code Playgroud)

现在,问题在于,当我释放课程时,计时器继续开启和开启事件.难道我做错了什么?似乎从不调用dealloc方法,否则myTimer将为nil,即使选择器被触发,它也不会进入if(myTimer)

iphone objective-c nstimer invalidation dealloc

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

使特定用户的会话无效

因此,对于我的webapp,如果我删除当前登录的用户,并且我想使他/她的会话无效.因此,只要他/她刷新页面或导航,他们就不再登录.我现在的方式是,如果用户成功登录,我将把用户对象存储在我的SessionScopedbean中,并将其存储HttpSessionApplication Map.以下是我的代码

这是我的SessionScoped豆子

@PostConstruct
public void init() {
    User user = UserDAO.findById(userId, password);
    Map<String, Object> appMap = FacesContext.getCurrentInstance().
             getExternalContext().getApplicationMap();
    HttpSession session = (HttpSession) FacesContext.getCurrentInstance().
             getExternalContext().getSession(false);
    appMap.put(userId, session);
}
Run Code Online (Sandbox Code Playgroud)

这是正确的方法吗?如果是这样,我该如何清理我的应用程序图?

session jsf login invalidation

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

设置drawable.invalidate以在画布上连续绘制

我试图逐步改变OvalShape()的alpha值.为此我需要调用invalidate,以便它不断调用自身并使用增加的alpha值渲染自身.

但设置是错误的,因为我对此没有太多的了解..

public class xml_anim_testing_sub_class extends View {
    private ShapeDrawable mDrawable;
    int x = 10;
    int y = 10;
    int width = 300;
    int height = 50;
    int my_alpha = 255,add_to_my_alpha = 0;

    public xml_anim_testing_sub_class(Context context) {
        super(context);
    }

    protected void onDraw(Canvas canvas) {
        x++;
        mDrawable = new ShapeDrawable(new OvalShape());
        mDrawable.getPaint().setColor(0xff74AC23);
        mDrawable.setAlpha(my_alpha += add_to_my_alpha );
        mDrawable.setBounds(x, y, x + width, y + height);
        if (my_alpha == 0)
            add_to_my_alpha  = 1;
        if (my_alpha == 255)
            add_to_my_alpha  = -1;
        mDrawable.draw(canvas);
        mDrawable.invalidateSelf();
    } …
Run Code Online (Sandbox Code Playgroud)

android callback invalidation drawable

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

从onDraw()调用invalidate()会导致堆栈溢出吗?

经过多次努力,我已经确定一个SurfaceView不会做我想做的事情,即高于一些UI元素而不是其他元素.我还发现,绘制所有UI元素SurfaceView实际上比我试图替换的多层次结构慢得多.因此,我正在尝试View使用自己的动画编码onDraw().

我能想到的最简单的方法大致如下:

  1. 现在测量时间
  2. 执行有关动画状态的计算
  3. 呼叫 invalidate()
  4. 在那里画动画 onDraw()
  5. 回到1.

我已经有了一个nextFrame()来自my 的函数,SurfaceView它执行第1步和第2步,而draw函数实际上是微不足道的 - 单个路径.我可以nextFrame()打电话invalidate(),我可以onDraw()打电话nextFrame()来表示绘图已经完成,我们已经为下一帧做好了准备.不幸的是,我可以想象这会导致问题.

是否invalidate()直接调用onDraw()?我需要实现一个调用线程SurfaceView吗?

stack-overflow android invalidation ondraw

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

使多个矩形或区域无效

我遇到问题,Invalidate()因为它OnPaint在我准备好之前调用... Invalidate(new Rectangle(x, y, width, height))当我需要重新绘制一个且只有一个区域时工作正常,但我需要做的是创建一个矩形集合以使其无效然后使用Update()方法重新绘制所有无效区域.我Invalidate()和它之间有点迷失Update():如何使用它们以及干净的方法是什么.

我需要实现这个目标,因为我正在研究细胞自动机,例如"Langton's ant"或"Conway的生命游戏".小网格不是问题,但是对于大尺寸网格(700x500),绘画是一个非常重要的问题.

所以我的问题是如何在不调用OnPaint每个失效的情况下使X矩形无效,然后调用OnPaint仅刷新指定区域(X矩形将=至少数百,数千肯定)?

.net c# onpaint invalidation winforms

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

在窗口周围绘制框架的桌面窗口无效

我正在编写一个简单的程序,列出屏幕上显示的每个窗口.我可以从列表中选择一个窗口,用矩形围绕它.我正在将矩形直接绘制到桌面窗口.我之前需要清除画布,因为我想选择我想要的窗口,一次选择一个窗口.

我已经尝试使桌面窗口无效,这实际上有效,但它会产生很多闪烁.

InvalidateRect(0, 0, True);
Run Code Online (Sandbox Code Playgroud)

在这种情况下直接在桌面上绘图是否正确?还有其他想法可以避免闪烁吗?

谢谢.

delphi desktop window draw invalidation

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

使行无效而不是矩形

要通过用户在C#中单击鼠标来提高绘制多点线的性能,我需要使线无效而不是矩形.有没有办法做到这一点?

panel1.Invalidate();
Run Code Online (Sandbox Code Playgroud)

c# line invalidation

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

自定义视图中的Android ObjectAnimator

我有一个自定义视图类似于进度条.在这个视图中,我有一个ObjectAnimator.AnimatorUpdateListener,我试图用它来调用视图上的invalidate.但是,我的观点不是更新!我试图添加一个按钮,只是将值更改为其他内容并调用invalidate一次并且它工作,我的视图更新以反映值的变化.

我在这里错过了什么吗?我打电话的次数是无效的吗?

我的"进度条"以浮点数0开始,动画应该将其设置为100.调用方法将其更新为50并调用invalidate有效,但是ObjectAnimator似乎没有调用invalidate.

在UI线程上调用所有内容

animation android view invalidation

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

在字符串中使用擦除函数是否会使迭代器无效

我有以下代码,它接受一个字符串并删除非字母字符

void removeNonAlpha(string& str){
    for (string::iterator it = str.begin(); it < str.end(); it++){
        if (!(isUpperCaseLetter(*it) || isLowerCaseLetter(*it) || str == ' '))  
            str.erase(it--);

    }
}
Run Code Online (Sandbox Code Playgroud)

我向我的教授展示了这个,他告诉我这样做是有风险的,因为它可能会使我正在使用的迭代器失效。但是,我认为擦除只会使擦除点之后的迭代器无效,并且我确保在该点之后不使用任何迭代器。那么这段代码是否会崩溃或导致任何未定义的行为?

c++ string iterator erase invalidation

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