1
for (NSString * district in allLinedStrings) {
    PO1(district);
    [self.mainLock lock];
    CLGeocoder * geocode= [[CLGeocoder alloc]init];
    [geocode geocodeAddressString:district completionHandler:^(NSArray *placemarks, NSError *error )
     {
         for (CLPlacemark * thePlace in placemarks)
         {
             [self handlePlacemark:thePlace];

         }
         [self.mainLock unlock];
     }];
}

geocodeAddressString を同期的に実行したいのですが、これを行います。どういうわけか、デッドロックのエラーが発生しました。しかし、何が問題なのですか?

4

1 に答える 1

1

NSLock を使用している場合: 同じスレッドで lock メソッドを 2 回呼び出すと、スレッドが永久にロックされます。

for (NSString * district in allLinedStrings) {
    PO1(district);
    [self.mainLock lock];
    CLGeocoder * geocode= [[CLGeocoder alloc]init];
    [geocode geocodeAddressString:district completionHandler:^(NSArray *placemarks, NSError *error )
     {
         for (CLPlacemark * thePlace in placemarks)
         {
             [self handlePlacemark:thePlace];

         }

     }];
[self.mainLock unlock];
}
于 2012-07-06T09:27:31.427 に答える