小编Pat*_*ckV的帖子

如何获取刚刚在PHPhotoLibrary中添加的图像的URL

我在两种情况下使用UIImagePickerController

  • 选择照片库中的现有图像
  • 拍摄新照片

在第一种情况下,当我从库中选择一个图像时,我可以轻松地在委托方法中获取URL:

- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    // Get the URL
    NSURL *url = [info valueForKey:UIImagePickerControllerReferenceURL];
    ...
}
Run Code Online (Sandbox Code Playgroud)

但是,当我拍摄新照片时,图片尚未出现在照片库中,并且还没有网址.所以,我首先需要在库中添加图像.但是,如何获取新资产的URL?

这是我在照片库中添加图像的代码

- (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
    // Get the image
    UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];

    // Add the image in the library
    [[PHPhotoLibrary sharedPhotoLibrary]

        performChanges:^
        {
            // Request creating an asset from the image.
            PHAssetChangeRequest *createAssetRequest = [PHAssetChangeRequest creationRequestForAssetFromImage:image];

            // Get the URL of the new asset here ?
            ...
        }

        completionHandler:^(BOOL success, NSError *error) …
Run Code Online (Sandbox Code Playgroud)

url ios8 phphotolibrary

16
推荐指数
1
解决办法
9754
查看次数

使用iOS 9.0中的CNContactPickerViewController,如何启用/禁用单个或多个选择?

委托CNContactPickerDelegate具有单个和多个选择的方法.但是,当我们呈现视图控制器时,我们如何指定我们想要单个或多个选择?

我想我错过了一些可能也导致我所描述的问题:CNUI ERROR选择谓词已设置但委托不实现contactPicker:didSelectContact:

contacts ios9

16
推荐指数
1
解决办法
6540
查看次数

在iOS 8中的UISplitViewController的主视图中有一个UINavigationController

在我的UISplitViewController中,主视图是一个包含UITableViewController的UINavigationController.有时,当用户选择表中的项时,我必须在主视图中的现有表上推送另一个tableViewController.

在iOS 7中,在我的第一个UITableViewController中,我只是调用它

[self.navigationController pushViewController:otherTableVC animated:YES];
Run Code Online (Sandbox Code Playgroud)

在iOS 8中:

折叠拆分视图时,otherTableVC将成为详细视图!旋转设备后,我们并排看到两张桌子......

更糟糕的是,如果设备显示两个窗格,代码工作得很好,第二个表被推到主视图中的第一个表.但是,经过两次旋转后,两张桌子又是并排的.似乎UISplitViewController的折叠模式干扰了我自己的导航控制器......

如何在主视图中管理自己的UINavigationController?

谢谢

编辑:

我的主视图和详细信息视图都有一个导航控制器.为了解决我的问题,我刚刚发现,在折叠模式下,我必须创建一个额外的导航控制器并将其推送到主导航控制器上.

UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:otherTableVC];
[self.navigationController pushViewController:navController animated:YES];
Run Code Online (Sandbox Code Playgroud)

所以我发现帽子我们可以将导航控制器推到另一个导航控制器中.

uinavigationcontroller uisplitviewcontroller ios8

12
推荐指数
1
解决办法
1万
查看次数

如何替换不推荐使用的方法splitViewController:willHideViewController:withBarButtonItem:forPopoverController:

我对此委托方法的标准实现如下.我只是初始化导航按钮并在本地保存按钮和弹出窗口.

- (void) splitViewController: (UISplitViewController *) splitController
      willHideViewController: (UIViewController *)      viewController
           withBarButtonItem: (UIBarButtonItem *)       barButtonItem
        forPopoverController: (UIPopoverController *)   popoverController
{
    // Set the button to open the PopOver
    barButtonItem.title = viewController.title;
    [self.navigationItem setLeftBarButtonItem:barButtonItem animated:YES];

    // Save the ref to the default left navigation button
    _masterButton = barButtonItem;

    // Save the ref to the PopOver
    _masterPopOver = popoverController;
}
Run Code Online (Sandbox Code Playgroud)

从iOS 8开始,不推荐使用此方法,Apple文档说:

实现splitViewController:willChangeToDisplayMode:方法.

但是新方法的参数与已弃用的方法无关!我想我必须自己创建一个按钮和一个弹出窗口?

有人已经进行了重新编码以实现当前的弹出行为吗?

谢谢您的帮助

deprecated uisplitviewcontroller ios8

7
推荐指数
1
解决办法
2902
查看次数

如何修改CNLabeledValue的值,保持标识符不变

新的"Contacts"框架引入了CNLabeledValue类.此类用于管理对标签值.但是CNLabeledValue有第三个属性:标识符.

在文档中我们可以读到: 建议您在重新获取的联系人中搜索以前已知的标记值对象时使用标识符.标识符可以在应用程序启动之间保留.

因此,如果在联系人应用程序中用户更改标签或值或两者,则无关紧要,因为我们可以使用标识符来标识CNLabeledValue.Contacts App修改CNLabeledValue,保持标识符不变.

我尝试做同样的事情但是如何修改现有提取的CNLabeledValue的值,保持标识符不变?例如,我想更改"工作"电话号码.我收到了CNLabeledValue的当前"工作"电话号码,现在是什么?

对于CNContact,我创建了一个mutableCopy

    CNMutableContact *mutableContact = [fetchedContact mutableCopy];
Run Code Online (Sandbox Code Playgroud)

可以修改mutableContact并保持获取的联系人相同的联系人标识符.

CNLabeledValue是一个不可变的值对象,它没有可变版本.我在创建新的CNLabeledValue时也无法给出标识符.

用另一个标识符替换CNLabeledValue与另一个标识符是不公平的,因为我的应用程序可能不是从Contacts中获取的唯一一个...我不会欣赏另一个应用程序修改CNLabeledValue标识符...

任何的想法?

frameworks objective-c contacts ios9

6
推荐指数
1
解决办法
830
查看次数

如何处理NSString中的32位unicode字符

我有一个NSString包含一个大于U + FFFF的unicode字符,就像MUSICAL SYMBOL G CLEF符号''.我可以创建NSString并显示它.

NSString *s = @"A\U0001d11eB";  // "AB"
NSLog(@"String = \"%@\"", s);
Run Code Online (Sandbox Code Playgroud)

日志正确并显示3个字符.这告诉我NSString做得很好,没有编码问题.

    String = "AB"
Run Code Online (Sandbox Code Playgroud)

但是当我尝试使用该方法遍历所有字符时

- (unichar)characterAtIndex:(NSUInteger)index
Run Code Online (Sandbox Code Playgroud)

一切都出错了.

unichar类型是16位,所以我希望音乐符号的字符错误.但是字符串的长度也是不正确的!

NSLog(@"Length = %d", [s length]);
for (int i=0; i<[s length]; i++)
{
    NSLog(@"  Character %d = %c", i, [s characterAtIndex:i]);
}
Run Code Online (Sandbox Code Playgroud)

显示器

    Length = 4
      Character 0 = A
      Character 1 = 4
      Character 2 = .
      Character 3 = B
Run Code Online (Sandbox Code Playgroud)

我应该使用哪些方法来正确解析我的NSString并获取我的3个unicode字符?理想情况下,正确的方法应该返回类似wchar_t的类型来代替unichar.

谢谢

unicode objective-c nsstring

5
推荐指数
1
解决办法
1140
查看次数