objective-c - ios中,用工厂方法如何return block里的值?
PHP中文网
PHP中文网 2017-04-18 09:55:47
0
3
450

正在学习Leancloud,想用一个工厂方法来封装查询代码,但是不能return block里的值,直接return objectID是空值,求指教,谢谢!

+ (NSString *)getObjectIDbyUsername:(NSString *)_username
{
    __block NSString *objectID = NULL;
    NSString *username = [NSString stringWithFormat:@"^%@$",_username];
    AVQuery *query = [AVQuery queryWithClassName:@"_User"];
    [query whereKey:@"username" containsString:username];
    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
        objectID = [objects valueForKey:@"objectId"];
    }];

    return objectID;
}
PHP中文网
PHP中文网

认证0级讲师

membalas semua(3)
小葫芦

Asynchronous:

+ (void)getObjectIDbyUsername:(NSString * )_username compelete:(void(^)(NSString * objectID))compelete{
    
    NSString *username = [NSString stringWithFormat:@"^%@$",_username];
    AVQuery *query = [AVQuery queryWithClassName:@"_User"];
    [query whereKey:@"username" containsString:username];
    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
        if (compelete) {
            compelete(nil);
            compelete = nil;
        }
    }];
}

// use:

[HTBaseContainer getObjectIDbyUsername:@"userName" compelete:^(NSString *objectID) {
    
}];

Penyegerakan:

+ (NSString *)getObjectIDbyUsername:(NSString *)_username
{
    dispatch_semaphore_t signal = dispatch_semaphore_create(1);
    
    __block NSString *objectID = NULL;
    NSString *username = [NSString stringWithFormat:@"^%@$",_username];
    AVQuery *query = [AVQuery queryWithClassName:@"_User"];
    [query whereKey:@"username" containsString:username];
    [query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
        objectID = [objects valueForKey:@"objectId"];
        dispatch_semaphore_signal(signal);
    }];
    
    dispatch_semaphore_wait(signal, DISPATCH_TIME_FOREVER);
    return objectID;
}
小葫芦
  1. Tambahkan bentuk kaedah kilang pada blok dan objek panggil balik blok

  2. dispatch_semaphore_t, tunggu sebelum pulang.

伊谢尔伦

Anda layak mempunyai kumpulan GCD Jika anda menggunakan swift, blok @escaping akan melakukannya. .

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!