2012-05-23 2 views
0

Я разработал этот большой модуль Titanium для доступа к ALAsset. https://github.com/amigoni/titanium-mobile-alasset-moduleМодуль ALAsset для титанов работает на симуляторе, но падает на устройство какие-либо намеки?

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

Вот где я подозреваю, что код

-(void)assetThumbnails:(id)args 
{ 
ENSURE_UI_THREAD_1_ARG(args); 
ENSURE_SINGLE_ARG(args,NSDictionary); 

id onthumb  = [args objectForKey:@"thumbnailCallback"]; 
NSString *group = [args objectForKey:@"group"]; 
ENSURE_STRING_OR_NIL(group); 
int page  = [TiUtils intValue:[args objectForKey:@"page"] def:1] - 1; 
int perPage  = [TiUtils intValue:[args objectForKey:@"perPage"] def:25]; 

int fromIndex = page * perPage; 
int toIndex  = fromIndex + perPage; 

NSUInteger groupTypes = ALAssetsGroupSavedPhotos; 
if(group == nil){ 
    group = @"savedPhotos"; 
} 
if([group isEqualToString:@"savedPhotos"]){ 
    groupTypes = ALAssetsGroupSavedPhotos; 
} else if([group isEqualToString:@"photoStream"]){ 
    groupTypes = ALAssetsGroupPhotoStream; 
} else if([group isEqualToString:@"faces"]){ 
    groupTypes = ALAssetsGroupFaces; 
} else if([group isEqualToString:@"all"]){ 
    groupTypes = ALAssetsGroupAll; 
} 
NSMutableArray *assets = [[NSMutableArray alloc] init]; 
RELEASE_TO_NIL(thumbCallback); 
thumbCallback = [onthumb retain]; 
void (^assetGroupEnumerator) (ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop){ 
    if(group != nil) { 
     [group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) { 
      if(result != nil) 
      { 
       if((index >= fromIndex) && (index <= toIndex)){ 
        NSURL *url = [[result defaultRepresentation] url]; 
        NSString *sUrl = [url absoluteString]; 
        NSDictionary *metadata = result.defaultRepresentation.metadata; 
         UIImage *thumbnail = [UIImage imageWithCGImage:[result thumbnail]]; 
         NSDictionary *event = [NSDictionary 
               dictionaryWithObjectsAndKeys: 
               [[[TiBlob alloc] initWithImage:thumbnail] autorelease], 
               @"thumbnail", 
               NUMINT(index), 
               @"index", 
               sUrl, 
               @"url", 
               metadata, 
               @"metadata", 
               nil]; 
         [assets addObject:event]; 
       } 
      } else { 
       if (thumbCallback!=nil) 
       { 
        NSDictionary *event = [NSDictionary dictionaryWithObjectsAndKeys:assets,@"assets", nil]; 
        [self _fireEventToListener:@"onThumbnail" withObject:event listener:thumbCallback thisObject:nil]; 
        [assets release]; 
       } 
      } 
     }]; 
    } 
}; 

ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; 

[library enumerateGroupsWithTypes:groupTypes 
         usingBlock:assetGroupEnumerator 
        failureBlock:^(NSError *error) {}]; 
[library release]; 
} 

Что интересно, что код, кажется, крах после 26-го пункта. Что, как вы видите из приведенного выше кода, будет первой из второй страницы.

Я действительно мало знаю о Objective C и искал некоторую помощь.

Thanks

ответ

0

Возможно, [освободить активы] вызывает исключение. Мое дело в том, что.

При выделении активов [[[[NSMutableArray alloc] init] autorelease] и удалите строку; Исключение не будет повышаться.

Смежные вопросы