我在两种情况下使用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) 委托CNContactPickerDelegate具有单个和多个选择的方法.但是,当我们呈现视图控制器时,我们如何指定我们想要单个或多个选择?
我想我错过了一些可能也导致我所描述的问题:CNUI ERROR选择谓词已设置但委托不实现contactPicker:didSelectContact:
在我的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)
所以我发现帽子我们可以将导航控制器推到另一个导航控制器中.
我对此委托方法的标准实现如下.我只是初始化导航按钮并在本地保存按钮和弹出窗口.
- (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:方法.
但是新方法的参数与已弃用的方法无关!我想我必须自己创建一个按钮和一个弹出窗口?
有人已经进行了重新编码以实现当前的弹出行为吗?
谢谢您的帮助
新的"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标识符...
任何的想法?
我有一个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.
谢谢
ios8 ×3
contacts ×2
ios9 ×2
objective-c ×2
deprecated ×1
frameworks ×1
nsstring ×1
unicode ×1
url ×1