我的iOS应用程序访问用户的照片ALAssetsLibrary
.当我更改应用程序的隐私设置(设置→隐私→照片)时,应用程序会被系统(SIGKILL
)杀死.这是一个错误吗?
我的应用程序使用GCDWebServer
我从我的iPhone相册中获取照片AssetsLibrary
并将其存储在中NSDocumentDirectory
.我只想访问此照片的Url以在网页中显示它们.
有我的代码:
[_webServer addHandlerForMethod:@"POST"
path:@"/"
requestClass:[GCDWebServerURLEncodedFormRequest class]
processBlock:^GCDWebServerResponse *(GCDWebServerRequest* request) {
ALAsset *asset = [self.arrayPictures objectAtIndex:0];
ALAssetRepresentation *rep = [asset defaultRepresentation];
CGImageRef iref = [rep fullResolutionImage];
UIImage *thumbnail = [UIImage imageWithCGImage:iref];
NSString* path ;
if (thumbnail != nil)
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
path = [[NSString alloc] initWithString:[documentsDirectory stringByAppendingPathComponent:@"test.png"]];
NSData* data = UIImagePNGRepresentation(thumbnail);
[data writeToFile:path atomically:YES];
}
NSURL *url = [NSURL fileURLWithPath:path];
NSString* html = [NSString stringWithFormat:@"<html><body><img …
Run Code Online (Sandbox Code Playgroud) objective-c ios assetslibrary nsdocumentdirectory gcdwebserver
我有一个应用程序,位置服务已启用(来自设置等),我正在使用ALAssetsLibrary从我的设备中读取所有照片.
它在iPhone4 iOS 4.2.1上完美运行,但相同的代码和相同的资产在任何3gs任何iOS(从4.0到4.2.1)上都不能工作.
问题是它总是在3gs上检索无效的CLLocation.
即使在iPhone4上的相同图片(复制到两个设备上)也会返回有效的CLLocation,在3gs上它返回无效!图片图片本身在两台设备上都有效,只有CLLocation无效.我没有任何崩溃,并且代码没有进入任何无效的块,除了无效的CLLocation数据之外它都可以正常工作.
输出相同的资产和相同的代码以及相同的iOS版本(4.2.1):
iPhone4:<+ 51.23816667,-0.57700000> +/- 0.00m(速度-1.00 mps /航向-1.00)@ 19/02/2011 01:59:28格林威治标准时间
3gs:<nan,nan> +/- 0.00m(速度-1.00 mps/course -1.00)@ 2011-02-19 01:20:35 +0000
(注意无效位置上的日期是当前时间)
我得到这样的CLLocation:
CLLocation* location = [asset valueForProperty:ALAssetPropertyLocation];
CLLocationCoordinate2D coord = [location coordinate];
if ( !CLLocationCoordinate2DIsValid(coord) ) return;
Run Code Online (Sandbox Code Playgroud)
在我的viewcontroller DidLoad中调用的ALAssetsLibrary代码看起来像这样(完全标准):
ALAssetsLibrary* library = [[ALAssetsLibrary alloc] init];
void (^assetEnumerator)(struct ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop) {
if(result != NULL)
{
[self myFunction:result withIndex:index];
}
}; …
Run Code Online (Sandbox Code Playgroud) 我有一些代码来包装从枚举ALAssetLibrary中的资产中检索到的ALAsset对象.我收到用户遇到崩溃的报告,包装器对象的一部分要求它包含元数据的ALAsset.
崩溃的代码在这个包装器类中,它只是要求它的ALAsset的元数据如下:
[[myAlAsset defaultRepresentation] metadata];
Run Code Online (Sandbox Code Playgroud)
这是一个部分堆栈跟踪,代表我看到的崩溃:
0
CoreFoundation CFDataGetBytePtr + 5
1
PhotoLibraryServices __46-[PLManagedAsset adjustmentsXMPRepresentation]_block_invoke + 228
2
PhotoLibraryServices __46-[PLManagedAsset adjustmentsXMPRepresentation]_block_invoke + 228
3
CoreData developerSubmittedBlockToNSManagedObjectContextPerform + 88
4
CoreData -[NSManagedObjectContext performBlockAndWait:] + 114
5
PhotoLibraryServices -[PLManagedAsset adjustmentsXMPRepresentation] + 226
6
AssetsLibrary __33-[ALAssetRepresentation metadata]_block_invoke + 24
7
AssetsLibrary __53-[ALAssetRepresentationPrivate _performBlockAndWait:]_block_invoke + 68
8
CoreData developerSubmittedBlockToNSManagedObjectContextPerform + 88
9
libdispatch.dylib _dispatch_client_callout + 22
10
libdispatch.dylib _dispatch_barrier_sync_f_invoke + 26
11
CoreData -[NSManagedObjectContext performBlockAndWait:] + 106
12
AssetsLibrary -[ALAssetsLibrary _performBlockAndWait:] + 134
13 …
Run Code Online (Sandbox Code Playgroud) 我在iOS4.1上尝试将照片保存到带有地理标记信息的相机胶卷时遇到了重大问题.我正在使用以下ALAssetsLibrary API:
- (void)writeImageDataToSavedPhotosAlbum:(NSData *)imageData
metadata:(NSDictionary *)metadata
completionBlock:(ALAssetsLibraryWriteImageCompletionBlock)completionBlock
Run Code Online (Sandbox Code Playgroud)
我有GPS坐标,我想用照片作为输入保存.遗憾的是,没有文档或示例代码描述如何形成封装GPS坐标的元数据NSDictionary.有人可以发布已知有效的示例代码吗?
我也尝试使用iPhone Exif库来保存imageData中的地理信息而不是使用元数据,但遗憾的是iPhone Exif库崩溃了.任何帮助是极大的赞赏.
我已经遇到这个问题,因为一个多星期以来,我无法从资产库网站获取原始照片/视频路径.
我可以通过将此文件保存到我的应用程序SandBox来获取其数据,但在这里我想避免这些事情再次创建该文件的另一个副本.
我在DropBox中投资,他们直接从assets-library url上传.所以,请帮我解决这个问题.
提前致谢.
这是我的代码:
-(NSString*) videoAssetURLToTempFile:(NSString*)combineURL{
self.activityIndicator.hidden = FALSE;
NSLog(@"combineURL: %@",combineURL);
NSArray *arr = [combineURL componentsSeparatedByString:@"->"];
NSString *index = [arr objectAtIndex:0];
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@",[arr objectAtIndex:1]]];
//url like: "assets-library://asset/asset.MOV?id=78988A2B-203B-41B9-8EDA-F3029303DFBF&ext=MOV"
NSString * surl = [url absoluteString];
NSString * ext = [surl substringFromIndex:[surl rangeOfString:@"ext="].location + 4];
NSTimeInterval ti = [[NSDate date]timeIntervalSinceReferenceDate];
NSString *fname = [NSString stringWithFormat: @"%f.%@",ti,ext];
NSString *stringPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]stringByAppendingPathComponent:@"SAVED_PHOTOS"];
// New Folder is your folder name
NSError *error = nil;
if (![[NSFileManager defaultManager] fileExistsAtPath:stringPath]) …
Run Code Online (Sandbox Code Playgroud) 我使用IOS AssetsLibrary从我的应用程序创建了"照片专辑".
读取ALAssetsLibrary,ALAssetsGroup和ALAsset文档,我看到了"addAsset","addAssetsGroupAlbumWithName"的方法.
有没有办法删除PROGRAMMATICYY我的ALAssetsGroup和ALAsset.(属性'editable'假设为TRUE,因为我创建了这个数据).
我有时会得到"超过最多5张过滤的专辑试图注册.这将失败." 当我在ALAssetsGroup上调用setAssetsFilter时.
谁知道为什么?我见过类似的问题,但都与UIImagePickerController有关.
这里的代码:
ALAssetsLibrary *lib = [[ALAssetsLibrary alloc] init];
[lib enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
[group setAssetsFilter:[ALAssetsFilter allPhotos]];
[group enumerateAssetsWithOptions:NSEnumerationReverse usingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {....}];
Run Code Online (Sandbox Code Playgroud) 如何从资产库中播放视频文件?我有像文件的URL
"assets-library://asset/asset.MOV?id=1000000023&ext=MOV"
Run Code Online (Sandbox Code Playgroud)
但是我无法使用以下代码在媒体播放器中播放此文件:
NSString *urlAddress = @"assets-library://asset/asset.mov?id=1000000023&ext=mov";
NSURL *theURL = [NSURL URLWithString:urlAddress];
MPMoviePlayerController *mp = [[MPMoviePlayerController alloc] initWithContentURL:theURL];
Run Code Online (Sandbox Code Playgroud) 我一直在使用iOS 6.x中的ALAssetsLibraryChangedNotification(目前特别是6.0.1),我得到的结果与我期望在我的userinfo中收到的内容相反,基于我从文档中理解的内容.
这是我的事件注册代码:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(assetsLibraryDidChange:) name:ALAssetsLibraryChangedNotification object:_library];
Run Code Online (Sandbox Code Playgroud)
测试,我进入我的照片库,删除一些项目,添加一些项目.
这是我的经纪人.
- (void)assetsLibraryDidChange:(NSNotification *)note
{
NSDictionary* info = [note userInfo];
NSLog(@"assetsLibraryDidChange calling syncPhotoInfoFromAssets, userInfo %@", info);
// If the user information dictionary is nil, reload all assets and asset groups.
if(note.userInfo==nil) {
[self syncPhotoInfoFromAssets];
return;
}
// If the user information dictionary an empty dictionary, there is no need to reload assets and asset groups.
if(note.userInfo.count == 0) {
return;
}
// If the user information dictionary is not empty, …
Run Code Online (Sandbox Code Playgroud) objective-c nsnotificationcenter assetslibrary alassetslibrary
assetslibrary ×10
ios ×5
iphone ×3
objective-c ×3
ios4 ×2
alasset ×1
assets ×1
cllocation ×1
cocoa-touch ×1
gcdwebserver ×1
ios5 ×1
ios6 ×1
ios7 ×1
ipad ×1
media-player ×1