1

我想将 NSInteger 参数传递给使用 performSelector:WithObject:afterDelay 调用的方法,所以我有以下代码:

   id arg = [NSNumber numberWithInt:myIdentifier]; 
   [self performSelector:@selector(myMethod:) withObject:arg afterDelay:kDuration];


    - (void) myMethod: (id) identifier
    {
    ...
    }

在 myMethod: 中,如何将标识符从 id 转换为 NSInteger?

我见过这个以前的问题: SEL performSelector and arguments

但我不明白 myMethodForNumber: - 它是如何用来拆箱号码的?

4

3 回答 3

2

myMethod可以接受NSNumber作为参数。然后,您可以使用NSNumber实例方法获取整数值。

- (void)myMethod:(NSNumber *)number {
    NSInteger value = [number integerValue];
}
于 2012-08-15T16:17:42.313 回答
1

更新:请参考问题

读或写performSelector:如下,

@import os.log;

- (void)testSEL
{
    os_log(OS_LOG_DEFAULT, "Original NSObject.version is %zd", NSObject.version); // original 0
    NSObject.version = 1;
    os_log(OS_LOG_DEFAULT, "Custom NSObject.version is %zd (should be 1)", NSObject.version); // custom 1

    // Reading
    NSInteger v = (NSInteger)[NSObject performSelector:@selector(version)];
    os_log(OS_LOG_DEFAULT, "Reading: version is %zd", v);

    // Writing
    [NSObject performSelector:@selector(setVersion:) withObject:(__bridge id)(void *)2];
    os_log(OS_LOG_DEFAULT, "Writing: NSObject.version is %zd", NSObject.version);
}
于 2020-06-18T07:59:33.197 回答
0

如果你知道它的类型,你可以只转换值:

- (void) myMethod: (id)identifier
{
    NSNumber *myNumber = (NSNumber *)identifier;
}

或者,您可以只指定该方法采用的类型:

- (void) myMethod:(NSNumber *)myNumber
{
    // Use myNumber
}
于 2012-08-15T16:17:14.513 回答