2010-10-25 1 views
0

У меня есть IPod Touch 2-го поколения, и я пытаюсь получить фотографию из библиотеки активов, используя название фотографии. Я запустил восстановление на устройстве, чтобы убедиться, что это фабрика 4.1.Runloop работает на тренажере не работает на устройстве

Мой заголовочный файл имеет:

#import <AssetsLibrary/AssetsLibrary.h> 
{ 
    BOOL fetching; 
} 
@property BOOL fetching; 


typedef void (^ALAssetsLibraryAssetForURLResultBlock)(ALAsset *asset); 
typedef void (^ALAssetsLibraryAccessFailureBlock)(NSError *error); 

и мой код:

- (void) imagePickerController:(UIImagePickerController *)picker 
didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
     NSArray *array = [info allKeys]; 
     for (NSString *str in array) NSLog(@"Key = %@", str); 

    // iPad uses UIImagePickerControllerMediaURL 
    // iPhone uses UIImagePickerControllerReferenceURL 

    NSURL *url = [info objectForKey:UIImagePickerControllerReferenceURL]; 

    fetching = NO; 
    NSLog(@"1 fetching = %d", fetching); 
    [self photoFromURL:url]; 
    NSLog(@"2 fetching = %d", fetching); 
    NSRunLoop *runLoop = [NSRunLoop currentRunLoop]; 
    NSLog(@"3 fetching = %d", fetching); 
    while (!fetching && [runLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]); 
    NSLog(@"4 fetching = %d", fetching); 

...

Где photoFromURL является

- (void) photoFromURL:(NSURL *)inURL 
{ 
    ALAssetsLibraryAssetForURLResultBlock resultblock = ^(ALAsset *myasset) 
    { 
     ALAssetRepresentation *rep = [myasset defaultRepresentation]; 
     CGImageRef iref = [rep fullResolutionImage]; 
     if (iref) 
     { 
      photo = [UIImage imageWithCGImage:iref]; 
      [photo retain]; 
      fetching = YES; 
     } 
    }; 

    ALAssetsLibraryAccessFailureBlock failureblock = ^(NSError *myerror) 
    { 
     NSLog(@"Cannot get image - %@",[myerror localizedDescription]); 
    }; 

    ALAssetsLibrary* assetslibrary = [[[ALAssetsLibrary alloc] init] autorelease]; 
    [assetslibrary assetForURL:inURL 
        resultBlock:resultblock 
        failureBlock:failureblock]; 
} 

Это прекрасно работает на симулятор, но runloop никогда возвращается на устройство. Я получаю первые три заявления NSLog для получения, но четвертый никогда не появляется.

Пожалуйста, помогите. - Dan

ответ

1

Location Services ???

я обнаружил, что я должен включить службы геолокации на устройстве. Мне никогда не приходило в голову, что мне нужны службы геолокации для доступа к библиотеке фотографий. Я полагаю, они все в новой библиотеке активов.

У меня было отключено, потому что IOS 4.0+ убивает сенсорную батарею IPOD.

0

Не тестировали, но я могу представить, что вам нужно будет добавить атрибут хранения __block к переменной-члену fetching.

__block BOOL fetching;