我遇到了大多数人在试图UIActivityViewController在iPad上呈现时所面临的情况; 它崩溃了:
Terminating app due to uncaught exception 'NSGenericException', reason: 'UIPopoverPresentationController (<_UIAlertControllerActionSheetRegularPresentationController: 0x7fc4f2d87d00>) should have a non-nil sourceView or barButtonItem set before the presentation occurs.
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
- (void)shareLeaflet
{
NSString *forwardedString = [[NSString alloc] initWithFormat:@"Check out this leaflet\n\n %@ \n\nself.theURLToShare];
UIActivityViewController *activityViewController = nil;
if (IDIOM == IPAD)
{
NSLog(@"iPad");
activityViewController.popoverPresentationController.sourceView = self.view;
// activityViewController.popoverPresentationController.sourceRect = self.frame;
[self presentViewController:activityViewController
animated:YES
completion:nil];
}
else
{
NSLog(@"iPhone");
activityViewController = [[UIActivityViewController alloc] initWithActivityItems:[NSArray arrayWithObjects:forwardedString, nil] applicationActivities:nil];
[self presentViewController:activityViewController animated:YES completion:nil];
} …Run Code Online (Sandbox Code Playgroud) 我的应用程序的1.0版终于完成了.这是一个简单的应用程序,能够查看多个传单和指向基于慈善机构的组织的视频链接.我已将其上传到iTunes Connect进行最终构建,但我在iTunes Connect中看到了"App Store文件大小警告".
该应用程序本身包含220个图像(每个图像的平均大小为500 Kb,但有些小得多).该应用程序的想法是让所有慈善机构的传单在应用程序中都可以在脱机状态下访问(因此,为什么它们不是从某个服务器下载的,等等).
该应用程序本身还包含公司视频的链接.所以视频本身不在应用程序中,而是视频的链接填充了应用程序UITableViewCells.
阅读关于App Store尺寸减小的许多问题,我已经将视频的1200个标题和URL移动到文本文件,而不是将它们存储在代码中.我缩小了图像的大小(它们不能再被缩小,因为它们会变成低分辨率).我不太确定我能做些什么来达到规定的限制?或者,我仍然可以提交,因为它只是一个警告,而不是错误?
例如,我今天下载的游戏是190Mb.这怎么解决这个问题?
该应用程序支持iOS 7,8和9,因此我无法使用App Thinning.我看到一些关于此的信息:iOS应用程序的最大大小,但它不是新的,等等.
我是否有可能绕过iTunes Connect中的警告并提交?(我会在ITC X mas休息后提交).
我想用Core数据执行一些简单的删除,但只需要一点建议.
我有一个包含交易,名称,事件和日期实体的模型.交易具有指向其他每个实体的链接.
在应用程序中,当用户向文本字段添加信息时,会将其保存到4选项卡表视图控制器中.
第一个选项卡使用NSFetchedResultController和事务实体上的fetchRequest.第二个选项卡使用名称实体,第三个选项卡使用事件,第四个选项卡使用日期实体.
如果我从"事务"选项卡中删除一个条目,它只删除那个有意义的事务.
我想要的是能够从名称选项卡中删除一个人,或从事件选项卡中删除一个事件,并让该级联通过应用程序的模型.因此,如果Bob有多个事务,删除他的事务选项卡将删除该一个事务.
如果我从名称选项卡中删除BOB,它应该将每个日期和交易中的每个事件都删除.
这同样适用于事件和日期.
编辑:更新以包括数据模型
注意:年份实体是实验性的,目前尚未使用
我该怎么做这样的事情?
谢谢
我希望在我的键盘上方实现一个自定义工具栏,用于包含一些自定义值的文本字段.我在网上发现了大量的教程,但这个问题是要问最好的方法是什么.
本教程http://blog.carbonfive.com/2012/03/12/customizing-the-ios-keyboard/提供了我可以在许多教程中看到的最常见的方式,创建了一个新的UIView子类并使用委托来获取该信息.
这就是共性.但是,我遇到了这个教程,它在视图控制器本身只创建工具栏,将它分配给textField inputAccessory,这很好.事实上,我尝试了代码,没有任何努力,我现在有一个自定义键盘.
http://easyplace.wordpress.com/2013/03/29/adding-custom-buttons-to-ios-keyboard/
这对我来说似乎有点太容易了,我认为正确的,Apple建议的方法是创建UIView子类并使用委托,以便带有文本字段的视图控制器充当该委托.
我在我的应用中专门针对iOS 7.
人们对此有何看法?如果支持第二个更容易的链接并且很可能通过Apple的指导,那么这是一个很好的起点,但如果代表是要走的路,我宁愿从一开始就研究它.
您的想法将不胜感激.
我对iCloud开发非常陌生,虽然我在应用程序商店中有2个版本的应用程序,但现在是时候提供iCloud功能了.
我需要问几个问题.这些看似非常基本,但我需要在继续之前了解正确的程序,我似乎无法在网上找到这些信息.
我的应用程序仅支持iOS 7,我也使用最新的Xcode.
问题和不确定性
我见过的所有教程都涵盖了将iCloud实现到一个新的应用程序,而不是App Store中已存在且已有App ID和配置文件的应用程序.我是否必须创建新的App ID,或者只是编辑现有的App ID以包含iCloud,然后生成新的配置文件?
另外,如果我生成新的配置文件,那么在我进行iCloud开发的过程中,这会直接影响我的任何测试设备吗?
对不起,我真的不知道该怎么做,任何有关推进这项工作的指导都非常感谢!
谢谢,
我已经在App Store中现有的应用程序,它与iOS 7的作品非常好和8是一个使用核心数据存储synching从用户添加的信息,以及iCloud中(键 - 值存储)的应用程序.
使用Xcode 5.1.1,一切都运行良好.我刚刚花了一些时间为我的用户发布紧急时区修复,因此修复与iCloud和Core Data无关.自从Xcode 6.0.1和iOS 8 SDK发布以来,我开始使用它.
在今天早上验证我的应用程序时,我收到以下错误:
Invalid Code Signing Entitlements. The entitlements in your app bundle signature do not match the ones that are contained in a provisioning profile. The bundle contains a key that is not included in the provisioning profile: 'com.apple.developer.icloud-container-environment' in Payload/AppName.app/AppName'.
Run Code Online (Sandbox Code Playgroud)
在Developer门户中,我的App ID启用了iCloud,但仅适用于Xcode 5,因为我还不想使用CloudKit:

在Xcode的部分中,在Xcode 6中,我现在看到以下内容,就像其他人一样:

使用我的权利文件夹.所以在我的情况下,它类似于82828282.com.company.app,并且在功能部分中为红色.

我不太明白我应该做些什么来让这个工作.
问题
1)我应该使用CloudKit吗?
2)我是否必须在Developer Portal的App ID中启用CloudKit?
3)我应该在Developer Portal中使用iCloud容器吗?
我目前的iCloud设置是使用权利:TeamID.identifier.
我通过从Xcode 5.1.1提交应用程序来解决这个问题,因为这是一个紧急修复,但我只是不明白如何使用iOS 8和Xcode 6.0.1进行未来开发,使用iCloud和我的应用程序中仍然启用了核心数据.
我已经看到了一些类似的案件中SO,喜欢这里(iCloud的核心数据不可用在Xcode 6/IOS 8 SDK运行后),并利用核心数据,iCloud的和CloudKit进行同步,备份,以及如何协同工作,但我真的不确定该怎么做.
任何指导都非常值得赞赏.
我以前有一个工作实现,我有一个TableViewController,我按下ADD按钮,它会调出另一个视图控制器,让用户可以向字段添加文本 - 这反过来又将这些信息添加到实体和属性,我可以显示表视图中的那个.实现以下方法,我可以滑动以成功删除行:
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (editingStyle == UITableViewCellEditingStyleDelete)
{
[self.managedObjectContext deleteObject:[self.transactions objectAtIndex:indexPath.row]];
[self.transactions removeObjectAtIndex:indexPath.row];
[self.tableView reloadData];
NSError *error = nil;
if (![self.managedObjectContext save:&error])
{
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
[self.tableView reloadData];
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我已成功实现了NSFetchedResultsController以允许添加和获取信息的相同功能,但更安全.我现在无法弄清楚的是如何实际实现相同的滑动来删除功能.
我补充说:
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
return YES;
}
Run Code Online (Sandbox Code Playgroud)
我添加了这个,并且"滑动"手势无法删除单元格.
在数据源的NSFetchedReusltsController代码中,我有:
- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath {
UITableView *tableView = self.tableView;
switch(type) …Run Code Online (Sandbox Code Playgroud) 我有一个简单的应用程序,它有一个表视图控制器执行基于fetchRequest的NSFetchedResultsController,我的fetchRequest有,或者需要有两个完全独立的独立谓词.
一个用于在searchBar中搜索,一个用于在实际表视图中显示信息.
当我同时活动时,只有一个有效.
这是谓词:
if ([self.personSearchBar.text length] > 0)
{
NSPredicate *personPredicate = [NSPredicate predicateWithFormat:@"ANY name CONTAINS[c] %@", self.personSearchBar.text];
[fetchRequest setPredicate:personPredicate];
}
NSPredicate *p = [NSPredicate predicateWithFormat:@"transactions.whoBy.@count !=0"];
[fetchRequest setPredicate:p];
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,有两个独立的谓词,但两者都需要处于活动状态并正常工作,因为现在处于这种状态,搜索实际上并不起作用,但如果我注释掉NSPredicate*p,它就会.
我应该使用复合谓词吗?如果是,我如何将这些独立谓词串在一起?
我的应用程序面临一个有趣的问题.首先,应用程序的前提很简单:一个表视图控制器,导航栏中有一个加号按钮; 用户按下加号,视图控制器以模态方式显示.用户添加名称,数量和事件,按下保存并通过NSFetchedResultsController和Core Data,该信息成功填充在表视图控制器中.
这非常有效.TableViewController也使用SearchBar,以便用户可以在表视图中搜索名称或事件.
问题是:
如果用户在表视图中搜索条目(并且未取消搜索),然后按添加按钮添加条目,填写信息并按保存,应用程序崩溃时出现以下错误:
CoreData: error: Serious application error. Exception was caught during Core Data change processing. This is usually a bug within an observer of NSManagedObjectContextObjectsDidChangeNotification. The left hand side for an ALL or ANY operator must be either an NSArray or an NSSet. with userInfo (null)
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'The left hand side for an ALL or ANY operator must be either an NSArray or an NSSet.'
Run Code Online (Sandbox Code Playgroud)
但是,如果用户确实从表视图中取消了搜索,然后添加了新条目,则不会崩溃.这是我需要解决的问题,因为在添加新条目之前,某些工作流可能看不到取消搜索的需要.
我在表视图中的NSFetchedResultsController具有以下谓词:
if …Run Code Online (Sandbox Code Playgroud) core-data uisearchbar nspredicate nsfetchedresultscontroller ios
在我的应用程序中,我现在对以前使用轻型键盘的所有UITextField使用“深色”外观的键盘。
在文本字段之一的键盘上方,我创建了一个自定义UIToolbar,其中包含一些按钮,允许用户选择键盘上方的选项之一。
这似乎比实际需要的要难得多,但是我试图使UIToolBar变暗而不是变亮,无论我如何尝试,工具栏始终是白色的,我似乎只能更改按钮的颜色。工具栏,而不是工具栏本身。
工具栏是用以下代码创建的:
UIToolbar *alertToolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0.0f, 0.0f,
self.view.window.frame.size.width, 44.0f)];
alertToolBar.backgroundColor = [UIColor blackColor];
//alertToolBar.tintColor = [UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:1.0f];
alertToolBar.translucent = NO;
alertToolBar.items = @[ [[UIBarButtonItem alloc] initWithTitle:@" GBP"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(barButtonAddText:)],
[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
target:nil
action:nil],
[[UIBarButtonItem alloc] initWithTitle:@" USD"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(barButtonAddText:)],
[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
target:nil
action:nil],
[[UIBarButtonItem alloc] initWithTitle:@" EUR"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(barButtonAddText:)],
[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace
target:nil
action:nil],
self.itemTextField.inputAccessoryView = alertToolBar;
Run Code Online (Sandbox Code Playgroud)
我已经使用上面(//alertToolBar.tintColor = [UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:1.0f];)注释掉的代码进行了尝试,并且条形图始终保持白色,但是只有“按钮”会改变颜色。
如何将整个工具栏更改为黑色?
任何帮助,将不胜感激!
我有一个分组的静态UITableView第4部分。在所有4个部分中,我都有一个页眉,只有最后一个部分具有页脚(代表应用程序的版本)。
因为我已经建立了UITableViewControllerusing Interface Builder和Storyboard,所以可以在Inspectors中设置页眉和页脚页边距的大小,所以我将每个页眉和页脚的边距设置为10。
但是我面临的问题是,由于检查器中的页脚大小,代表页脚的UILabel被切断了。
我使用自定义标签,因为我将页脚标题放在中间,使其变为白色并更改了字体大小。
这是该代码:
- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
if (section == 3)
{
CGRect screenRect = [[UIScreen mainScreen] applicationFrame];
UIView* headerView = [[UIView alloc] initWithFrame:CGRectMake(0, 80, screenRect.size.width, 44.0)];
UILabel *label=[[UILabel alloc]initWithFrame:CGRectMake(0, 80, tableView.frame.size.width, 80.0)];
label.textAlignment = NSTextAlignmentCenter;
label.textColor = [UIColor whiteColor];
NSString* currentAppVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
label.text = [NSString stringWithFormat:@"Version: %@", currentAppVersion];
label.font = [UIFont systemFontOfSize:14];
[headerView addSubview:label];
return label;
}
else
{
return nil;
} …Run Code Online (Sandbox Code Playgroud) ios ×10
objective-c ×6
core-data ×5
nspredicate ×2
uitableview ×2
cascading ×1
cloudkit ×1
delegates ×1
icloud ×1
ios8 ×1
ipad ×1
iphone ×1
keyboard ×1
size ×1
static ×1
uicolor ×1
uilabel ×1
uisearchbar ×1
uitextfield ×1
uitoolbar ×1
uiwebview ×1
xcode ×1