标签: performselector

斯威夫特:随机一段时间后重复动作

以前,使用Objective-C我可以使用performSelector:以便在随机时间段之后重复一个动作,该动作可能在1-3秒之间变化.但由于我无法使用performSelector:在Swift中,我尝试过使用"NSTimer.scheduledTimerWithTimeInterval".它的工作原理是为了重复这个动作.但有一个问题.设置时间变量以调用将生成随机数的函数.但似乎NSTimer每次重复动作时都会使用相同的数字.

这意味着该动作不是随机执行的,而是在游戏开始时随机生成的一段时间之后执行,并且在整个游戏期间使用.

问题是:有没有办法设置NSTimer每次执行动作时创建一个随机数?或者我应该使用不同的方法?谢谢!

random nstimer performselector sprite-kit swift

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

在目标C/Iphone开发中使用Perform Selector有什么用处

目标C中执行选择器的用途是什么?你可以告诉我执行选择器和响应选择器之间的区别吗?

iphone cocoa-touch objective-c ios performselector

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

如何将数组传递给期望var args的objc方法(例如......')

我在库中有一个看起来像这样的方法:

- (id)initWithSomeObjects:(NSString *)something, ... NS_REQUIRES_NIL_TERMINATION;
Run Code Online (Sandbox Code Playgroud)

我真的想用数组而不是var args来调用它,因为我想传入的对象数量是可以改变的.

有没有办法,使用performSelector或NSInvocation或objc_msgSend或其他什么,我可以调用var args方法,参数来自数组?

objective-c nsinvocation performselector objc-message-send

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

关于performSelector返回值

每个人都知道ios在swift2.0中支持"performSelector"我想知道如何获得performSelector的返回值?

let returnValue:Unmanaged<AnyObject> = (self.dataSource?.performSelector("myselector:", withObject: self))!
let value : Int? = returnValue.takeRetainedValue() as? Int
Run Code Online (Sandbox Code Playgroud)

最后一行出现崩溃,如何在swift2.0中获取"performSelector"的值?

unmanaged performselector swift

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

Objective-c performSelector:vs performSelector:withObject

是否[myObject performSelector:@selector(something) withObject:nil];只是打电话一样[myObject performSelector:@selector(something)];

objective-c selector performselector

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

performSelector或直接

我知道这两者有点类似,但两者之间必须有任何内部差异,

[anObject performSelector:@selector(thisMethod:) withObject:passedObject];
Run Code Online (Sandbox Code Playgroud)

相当于:

[anObject thisMethod:passedObject];
Run Code Online (Sandbox Code Playgroud)

请告诉我在编译,记忆等方面有什么不同.

cocoa objective-c ios performselector

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

具有整数对象参数的目标C performselector提供垃圾值

我有一个带有以下接口的Rectangle对象:

@interface Rectangle : NSObject

  @property int height, width;
  -(void) setWidth:(int)w andHeight: (int)h;

@end
Run Code Online (Sandbox Code Playgroud)

我有一个实现,并有一个对象(比如说r)。当我打电话

[r setWidth: 5 andHeight: 6];
Run Code Online (Sandbox Code Playgroud)

通过验证时,我得到正确的结果[r height]。但是,当我使用performselector相同的方法时:

NSNumber *myNumber = [NSNumber numberWithInt:45];
[r performSelector:@selector(setWidth:andHeight:) withObject:myNumber
            withObject:myNumber];
Run Code Online (Sandbox Code Playgroud)

调用会[r height]打印一些垃圾值(看起来像某个地址),预期值为45。我在做什么错?

objective-c ios performselector

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

使用withObject:self和withObject:nil之间的区别

我一直想知道以下几行代码

[self performSelector:@selector(myMethod) withObject:self afterDelay:1.0];
[self performSelector:@selector(myMethod) withObject:nil afterDelay:1.0];
Run Code Online (Sandbox Code Playgroud)
  1. 什么是上面两行代码之间的区别.
  2. 什么时候我们应该设置对象作为nil何时将对象设置为self

在大多数情况下,我注意到要设置的对象nil.

iphone objective-c ios performselector

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

UIKit中是否有基类/实用程序类,内置事件处理?

我正在寻找一个具有类似于UIButton工作方式的"事件列表"的类,您可以在其中添加多个目标和选择器.

写一个很容易,但如果Apple已经提供了解决方案,我宁愿使用它而不是维护更多的代码.

注意:

这是一个非可视类,所以我真的不想使用任何UI特定的东西.

编辑:

我最终使用堆叠的NSDictionary实例滚动我自己的基本事件调度程序类.

@implementation ControllerBase
@synthesize eventHandlers;


- (id) init
{
    self = [super init];

    if (self!=NULL)
    {
        NSMutableDictionary* dict = [[NSMutableDictionary alloc] init];
        [self setEventHandlers: dict];

        [dict release];
    }

    return self;
}


-(void) addTarget: (id) target  action:(SEL) selector  forEvent:(NSString*) eventName
{
    NSString* selectorString =  NSStringFromSelector(selector);   
    NSMutableDictionary* eventDictionary = [eventHandlers objectForKey:eventName];

    if (eventDictionary==NULL)
    {
        eventDictionary = [[NSMutableDictionary alloc] init];
        [eventHandlers setValue:eventDictionary forKey:eventName];
    }

    NSArray* array = [NSArray arrayWithObjects:selectorString,target, nil];
    [eventDictionary setValue:array forKey: [target description]];
}

-(void) removeTarget: …
Run Code Online (Sandbox Code Playgroud)

objective-c selector uikit ios performselector

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

NSMutableArray上的performSelector错误

您好,我在NSMutableArray上使用performSelector有一个棘手的问题.我有可能误解了performSelector的作用.基本上我有NSMutableArray与对象(所有这些都是基于我的类的对象,它继承自UIButton,但这并不重要,我猜)我需要向数组中的所有对象发送消息.

在我的类的头文件中,我已经声明了函数,它由selector调用.它看起来像这样:

-(void)scaleChangedWithANumber:(NSNumber *)scale;
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我的数组包含3个对象.如果我逐项称呼它们,它的工作原理很完美:

NSNumber *tmpNumber=[NSNumber numberWithFloat:scale];


ButtonOfElement *tmpButton1=[elementsButtonContainer objectAtIndex:0];
[tmpButton1 performSelector:@selector(scaleChangedWithANumber:) withObject:tmpNumber];

ButtonOfElement *tmpButton2=[elementsButtonContainer objectAtIndex:1];
[tmpButton2 performSelector:@selector(scaleChangedWithANumber:) withObject:tmpNumber];

ButtonOfElement *tmpButton3=[elementsButtonContainer objectAtIndex:2];
[tmpButton3 performSelector:@selector(scaleChangedWithANumber:) withObject:tmpNumber];
Run Code Online (Sandbox Code Playgroud)

但是如果我尝试在数组上调用performSelector(我需要向数组中的所有对象发送消息):

NSNumber *tmpNumber=[NSNumber numberWithFloat:scale];
[elementsButtonContainer performSelector:@selector(scaleChangedWithANumber:) withObject:tmpNumber];
tmpNumber=nil;
Run Code Online (Sandbox Code Playgroud)

我收到错误:

[__NSArrayM scaleChangedWithANumber:]: unrecognized selector sent to instance 0x1737f0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayM scaleChangedWithANumber:]: unrecognized selector sent to instance 0x1737f0'
*** First throw call stack:
(0x34e456c3 0x370be97f 0x34e49227 0x34e47951 0x34d9f468 0x31d1 0x369a70eb 0x369a7447 0x369324d9 0x368f9c0d 0x36ae5649 0x3681df4f 0x3681c9b3 0x3682791f 0x368274eb …
Run Code Online (Sandbox Code Playgroud)

objective-c nsmutablearray performselector

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