2012-02-15 13 views
7

मेरे ऐप में एक बटन है, उपयोगकर्ता बस इसे क्लिक करें, फिर पुस्तकालय में नवीनतम तस्वीर सीधे स्क्रीन पर पुनर्प्राप्त की जा सकती है। लाइब्रेरी में नवीनतम तस्वीर कैसे प्राप्त करें?आईफोन लाइब्रेरी में नवीनतम तस्वीर कैसे प्राप्त करें?


2012/02/17

इस ALAsset

void (^assetEnumerator)(ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop) 
    { 
     if(result != nil) 
     { 

      [self.assets addObject:result]; 

     } 
    }; 

    void (^assetGroupEnumerator)(ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop) 
    { 
     if(group != nil) 
     { 
      [group setAssetsFilter:[ALAssetsFilter allPhotos]]; 
      [group enumerateAssetsUsingBlock:assetEnumerator]; 
     }else{ 
      self.image = [self getLastImage]; 

     } 

    }; 
    ALAssetsLibraryAccessFailureBlock failureblock = ^(NSError *myerror){ 
     NSLog(@"error occour =%@", [myerror localizedDescription]); 
    }; 


    assets = [[NSMutableArray alloc] init]; 
    ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init]; 
    [assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:assetGroupEnumerator failureBlock:failureblock]; 
    [assetsLibrary release]; 

प्राप्त कर सकते हैं मैं इस

assetURLArray = [[NSMutableArray alloc] init]; 
    for (ALAsset *asset in self.assets) { 
     NSDate * date = [asset valueForProperty:ALAssetPropertyDate]; 

का उपयोग फ़ाइल तिथि प्राप्त करने के लिए तो मैंने पाया कि नवीनतम छवि हमेशा परिसंपत्तिलर्रे का शीर्ष एक, इसलिए मुझे अंततः इस

जैसे नवीनतम मिलते हैं
if (self.assets && [self.assets count]) { 
     ALAsset *asset = [self.assets objectAtIndex:([self.assets count] - 1)]; 
     CGImageRef ref = [[asset defaultRepresentation]fullResolutionImage]; 

मुझे नहीं लगता कि यह हमेशा काम करता है ... उम्मीद है कि कोई भी मुझे साबित कर सकता है।

और वहाँ मैं एक तरह से धागा सिंक करने के लिए की तलाश में हूँ ...

+0

तुम सिर्फ कर सकते हैं '[self.assets lastObject]' है, जो काम आते हुए रिटर्न शून्य अगर गणना 0 है। –

उत्तर

2

यह कोड स्निपेट प्राप्त कर सकते हैं एक ALAsset:

void (^assetEnumerator)(ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger 
index, BOOL *stop) { 
    if(result != nil) { 
     [self.assets addObject:result]; 
    } 
}; 

void (^assetGroupEnumerator)(ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop) { 
    if(group != nil) { 
     [group setAssetsFilter:[ALAssetsFilter allPhotos]]; 
     [group enumerateAssetsUsingBlock:assetEnumerator]; 
    } else { 
     self.image = [self getLastImage]; 
    } 
}; 

ALAssetsLibraryAccessFailureBlock failureblock = ^(NSError *myerror) { 
    NSLog(@"error occour =%@", [myerror localizedDescription]); 
}; 

assets = [[NSMutableArray alloc] init]; 
ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init]; 
[assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:assetGroupEnumerator failureBlock:failureblock]; 
[assetsLibrary release]; 

मैं इस का उपयोग फ़ाइल तिथि पाने के लिए:

assetURLArray = [[NSMutableArray alloc] init]; 
for (ALAsset *asset in self.assets) { 
    NSDate * date = [asset valueForProperty:ALAssetPropertyDate]; 

तब मैंने पाया कि नवीनतम छवि हमेशा के शीर्ष से एक हो assetURLArray, इसलिए मुझे अंततः इस तरह का नवीनतम मिलता है:

if (self.assets && [self.assets count]) { 
    ALAsset *asset = [self.assets objectAtIndex:([self.assets count] - 1)]; 
    CGImageRef ref = [[asset defaultRepresentation] fullResolutionImage]; 

मुझे नहीं पता कि यह हमेशा काम करता है ... मुझे उम्मीद है कि कोई इसके बारे में मेरे संदेह को साफ़ कर सकता है।

और वहाँ मैं एक तरह से धागा सिंक करने के लिए की तलाश में हूँ ...


2012-04-03 अपडेट

अब मैं NSNotification का उपयोग इस समस्या को हल करने के लिए:

- (void)gotLastImageCallBack { 
    if (notifyName) { 
     [[NSNotificationCenter defaultCenter] postNotificationName:notifyName object:nil]; 
    } 
} 

छवि प्राप्त करने के बाद, अधिसूचना संबंधित कक्षा में वापस कॉल भेजती है।

2

आप सभी तस्वीरें बनाई गई तारीख और फिर दिनांक के आधार पर उन्हें सुलझाने के लिए की जरूरत है।

- (NSDictionary *) attributesForFile:(NSURL *)anURI { 

// note: singleton is not thread-safe 
NSFileManager *fileManager = [NSFileManager defaultManager]; 
NSString *aPath = [anURI path]; 

if (![fileManager fileExistsAtPath:aPath]) return nil; 

NSError *attributesRetrievalError = nil; 
NSDictionary *attributes = [fileManager attributesOfItemAtPath:aPath 
          error:&attributesRetrievalError]; 

if (!attributes) { 
    NSLog(@"Error for file at %@: %@", aPath, attributesRetrievalError); 
    return nil; 
} 

NSMutableDictionary *returnedDictionary = 
    [NSMutableDictionary dictionaryWithObjectsAndKeys: 
     [attributes fileType], @"fileType", 
     [attributes fileModificationDate], @"fileModificationDate", 
     [attributes fileCreationDate], @"fileCreationDate", 
     [NSNumber numberWithUnsignedLongLong:[attributes fileSize]], @"fileSize", 
    nil]; 

return returnedDictionary; 
} 
+0

धन्यवाद लेकिन फोटो लिब तक पहुंच कैसे प्राप्त करें और प्रत्येक एल्बम में सभी छवियों को कैसे पढ़ा जाए? –

+1

http://www.icodeblog.com/2010/07/08/asset- पुस्तकालय-and-blocks-in-ios-4/ –

+0

चीयर्स साथी !!!! –

11

आप बस निम्नलिखित ALAssetsGroup

(void)enumerateAssetsWithOptions:(NSEnumerationOptions)options usingBlock:(ALAssetsGroupEnumerationResultsBlock)enumerationBlock;** 

    applying **NSEnumerationReverse** option 

    void (^assetEnumerator)(ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop) 
     { 
      if(result != nil) 
      { 

       [self.assets addObject:result]; 

      } 
     }; 

     void (^assetGroupEnumerator)(ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop) 
     { 
      if(group != nil) 
      { 
       [group setAssetsFilter:[ALAssetsFilter allPhotos]]; 
       [group enumerateAssetsWithOptions:NSEnumerationReverse usingBlock:assetEnumerator]; 
      } 

     }; 
     ALAssetsLibraryAccessFailureBlock failureblock = ^(NSError *myerror){ 
      NSLog(@"error occour =%@", [myerror localizedDescription]); 
     }; 


     assets = [[NSMutableArray alloc] init]; 
     ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc] init]; 
     [assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:assetGroupEnumerator failureBlock:failureblock]; 
     [assetsLibrary release]; 


    **Your self.assets array will have latest images** 
0
UIButton *photoAlbum = [[UIButton alloc] init]; 
[photoAlbum addTarget:self action:@selector(getLatestPhoto:) forControlEvents:UIControlEventTouchDown]; 

-(void)getLatestPhoto 
{ 
    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; 

    [library enumerateGroupsWithTypes:ALAssetsGroupLibrary usingBlock:^(ALAssetsGroup *group, BOOL *stop) 
    { 
     [group setAssetsFilter:[ALAssetsFilter allPhotos]]; 
     if ([group numberOfAssets] > 0) 
     { 
      [group enumerateAssetsAtIndexes:[NSIndexSet indexSetWithIndex:[group numberOfAssets]-1] options:0 
          usingBlock:^(ALAsset *alAsset, NSUInteger index, BOOL *innerStop) 
      { 

      }]; 
     } 
    } 
     failureBlock: ^(NSError *error) 
    { 
     NSLog(@"No Photo"); 
    }]; 
} 
0

की विधि द्वारा यह कर सकते हैं बस करना यह लोग

void (^enumerate)(ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop) 
{ 
    if ([[group valueForProperty:@"ALAssetsGroupPropertyType"] intValue] == ALAssetsGroupSavedPhotos) 
    { 
     NSLog(@"Camera roll"); 
     [group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) { 
      if(result != nil){ 
       ALAssetRepresentation *rep = [result defaultRepresentation]; 
       [thumbnailsArray insertObject:rep atIndex:0]; 
      } 

     }]; 
    } 
संबंधित मुद्दे