标签: performselector

iOS - 如何使用多个参数和afterDelay实现performSelector?

我是一个iOS新手.我有一个选择器方法如下 -

- (void) fooFirstInput:(NSString*) first secondInput:(NSString*) second
{

}
Run Code Online (Sandbox Code Playgroud)

我正在尝试实现这样的东西 -

[self performSelector:@selector(fooFirstInput:secondInput:) withObject:@"first" withObject:@"second" afterDelay:15.0];
Run Code Online (Sandbox Code Playgroud)

但这给了我一个错误说 -

Instance method -performSelector:withObject:withObject:afterDelay: not found
Run Code Online (Sandbox Code Playgroud)

关于我缺少什么的任何想法?

iphone selector ios performselector

89
推荐指数
6
解决办法
9万
查看次数

将NSOperation子类化为并发和可取消

我无法找到关于如何子类化为NSOperation并发以及支持取消的良好文档.我阅读了Apple文档,但我无法找到"官方"示例.

这是我的源代码:

@synthesize isExecuting = _isExecuting;
@synthesize isFinished = _isFinished;
@synthesize isCancelled = _isCancelled;

- (BOOL)isConcurrent
{
    return YES;
}

- (void)start
{
/* WHY SHOULD I PUT THIS ?
    if (![NSThread isMainThread])
    {
        [self performSelectorOnMainThread:@selector(start) withObject:nil waitUntilDone:NO];
        return;
    }
*/

    [self willChangeValueForKey:@"isExecuting"];
    _isExecuting = YES;
    [self didChangeValueForKey:@"isExecuting"];


    if (_isCancelled == YES)
    {
        NSLog(@"** OPERATION CANCELED **");
    }
    else
    {
        NSLog(@"Operation started.");
        sleep(1);
        [self finish];
    }
}

- (void)finish
{
    NSLog(@"operationfinished.");

    [self willChangeValueForKey:@"isExecuting"];
    [self willChangeValueForKey:@"isFinished"];

    _isExecuting = NO; …
Run Code Online (Sandbox Code Playgroud)

iphone nsoperation nsoperationqueue performselector

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

替代Swift中的performSelector?

Swift中没有这类performSelector方法.那么如何在一个对象上调用一个方法,在运行时选择要调用的方法,而在编译时不知道?显然在Swift中也没有.@objcNSInvocation

我知道在Swift中,你可以向类型发送任何方法(@objc方法声明可见)AnyObject,类似于idObjective-C.但是,这仍然需要您在编译时对方法名称进行硬编码.有没有办法在运行时动态选择它?

performselector swift

46
推荐指数
7
解决办法
5万
查看次数

如何在Objective-C和Swift中等待

我想UILabel在2秒后改变我的文字.

我尝试将我UILabel的文本设置为"文本",然后使用sleep(2)并最终将文本更改为"另一个文本".

sleep(2)只冻结应用程序并设置"另一个文本"而不显示"A文本" 2秒.

如何显示"A text" 2秒然后显示"Another text"

objective-c wait ios performselector swift

43
推荐指数
5
解决办法
8万
查看次数

iOS performSelectorOnMainThread具有多个参数

我想在另一个线程的主线程上执行一个选择器,但是选择器有多个参数,类似于:

-(void) doSomethingWith:(int) a b:(float)b c:(float)c d:(float)d e:(float)e { //... }

我怎样才能使用它performSelectorOnMainThread: withObject: waitUntilDone:

编辑

我想解释一下为什么我需要这个.

我在主线程上使用UIImageViews,并在另一个线程上对它们进行计算.我使用了很多计算,所以如果我在主线程上创建所有内容,那么应用程序就会滞后.我知道UI元素只能在主线程上操作,这就是为什么我希望它以这种方式工作,所以主线程可以听到没有滞后的触摸事件.

arguments objective-c ios performselector

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

performSelector的返回值:

performSelector的返回值是什么:如果我传递一个返回基本类型(在对象上)的选择器,例如NSDateComponents上的'week'(将返回一个int)?

cocoa cocoa-touch objective-c performselector

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

Swift替代performSelectorOnMainThread

我想在此方法中的块中重新加载我的表数据:

import UIKit
import AssetsLibrary

class AlbumsTableViewController: UITableViewController {

    var albums:ALAssetsGroup[] = []

    func loadAlbums(){
        let library = IAAssetsLibraryDefaultInstance

        library.enumerateGroupsWithTypes(ALAssetsGroupType(ALAssetsGroupAll),
            usingBlock: {(group, stop) in
                if group {
                    self.albums.append(group)
                }
                else {
                    dispatch_async(dispatch_get_main_queue(), {

                        self.tableView.reloadData()

                    })
                }
            }, failureBlock: { (error:NSError!) in println("Problem loading albums: \(error)") })

    }

    override func viewDidLoad() {
        super.viewDidLoad()
        loadAlbums()

        // Uncomment the following line to preserve selection between presentations
        // self.clearsSelectionOnViewWillAppear = false

        // Uncomment the following line to display an Edit button in the navigation …
Run Code Online (Sandbox Code Playgroud)

performselector swift ios8

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

如何在下一次运行循环迭代中尽快调用方法?

我需要一种保存方式来说:"iOS,我希望这个方法尽快执行,但不要在这个循环迭代中执行.最早在下一个,但请不要在这一个.谢谢."

现在我总是这样做:

[self performSelector:@selector(doSomethingInNextRunLoop) withObject:nil afterDelay:0];
[self doSomeOtherThings];
Run Code Online (Sandbox Code Playgroud)

假设-doSomeOtherThings将始终执行 -doSomethingInNextRunLoop.

文件说:

指定延迟0不一定会导致选择器立即执行.选择器仍在线程的运行循环中排队,并尽快执行.

所以基本上可能会发生这种方法被立即调用,好像我刚刚发送了一条直接消息,导致-doSomethingInNextRunLoop之前被执行-doSomeOtherThings

我怎样才能确保它会被调用asap但是从来没有在同一个运行循环迭代中被调用?

澄清措辞:对于运行循环,我指的是主线程,以及所有方法必须返回的迭代,直到线程再次为新事件准备好.

iphone nsobject ipad ios performselector

16
推荐指数
2
解决办法
3524
查看次数

使用带有三个或更多参数的performSelector?

各种performSelector:...方法最多可以处理传递给指定选择器的两个参数.如果我需要传递三个或更多参数,我该怎么办?

objective-c selector performselector

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

如何在迁移到ARC时解决"没有已知的选择器'executeSelector:withObject:afterDelay:'的实例方法?

ARC迁移工具在开始迁移之前拒绝接受此代码:

[self.delegate performSelector:@selector(overlayDismissed:) withObject:self afterDelay:0];
Run Code Online (Sandbox Code Playgroud)

委托被迫使用协议实现此方法,它应该工作正常:

@protocol OverlayDelegate <NSObject>
- (void)overlayDismissed:(Overlay*)overlay;
@end

@interface Overlay : UIImageView {
    id<OverlayDelegate> delegate;
}

@property (nonatomic, assign) id<OverlayDelegate> delegate;
Run Code Online (Sandbox Code Playgroud)

ARC有什么问题?为什么它告诉我"没有已知的选择器实例方法'performSelector:withObject:afterDelay:'?

delegates ios automatic-ref-counting performselector

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