小编Ami*_*ark的帖子

CoreData + iCloud + Cascade删除 - 如何处理?

CoreDataCoreData使用级联删除规则,实体"A"与条目"B" 的集合具有一对多的关系.

iCloud环境中,当设备1显示"B"条目之一的详细视图时,设备2删除"A"条目.

NSPersistentStoreDidImportUbiquitousContentChangesNotification在设备1中接收到通知时,其App Delegate调用mergeChangesFromContextDidSaveNotification然后广播内部通知,该内部通知由视图控制器捕获,显示条目"B"的细节(代码使用performBlock它应该的位置).

但是,尽管当详细视图控制器接收到内部通知时,条目"A"确实无效,但条目"B"仍然作为有效CoreData对象存在.似乎Cascade规则尚未完成其运作.因此,设备1中的视图控制器不知道删除,这可能导致意外的结果.

mergeChangesFromContextDidSaveNotification 当基础数据已合并但Cascade规则尚未完成时,似乎过早地返回.

我在通知到达时尝试刷新条目"B",同时暂时将stalenessInterval托管对象上下文设置为零,因此不会使用缓存对象,但我仍然从商店获得有效条目"B".

此时检查null条目"A"不是一个选项,因为情况比我在此描述的情况稍微复杂一些,并且空条目"A"在某些情况下可能有效.

我尝试在合并更改之后和将内部通知发送到视图控制器之前引入延迟.我发现2秒延迟没有帮助,但延迟10秒有效.

但我不想依赖这种延迟.这是一个没有太多数据的测试环境,我不知道在生产环境中会发生什么.依靠实验性延迟似乎不是正确的做法.

有没有正确的事情?或者我开始做错了什么?

core-data cascading-deletes ios icloud

78
推荐指数
1
解决办法
1778
查看次数

UIButton图像旋转问题

我有一个[UIButton buttonWithType:UIButtonTypeCustom]图像(或背景图像 - 相同的问题),通过[UIImage imageWithContentsOfFile:]指向相机拍摄的JPG文件创建,并由应用程序保存在文档文件夹中.

如果我UIControlStateNormal仅定义图像,那么当我触摸按钮时,图像会像预期的那样变暗,但它也会旋转90度或180度.当我移开手指时,它恢复正常.

如果我使用相同的图像UIControlStateHighlighted,这不会发生,但后来我失去了触摸指示(较暗的图像).

这只发生在从文件中读取的图像时.它不会发生[UIImage ImageNamed:].

我尝试以PNG格式而不是JPG格式保存文件.在这种情况下,图像以错误的方向显示,并且在触摸时不会再次旋转.无论如何,这不是一个好的解决方案,因为PNG太大而且处理起来很慢.

这是一个错误还是我做错了什么?

uibutton uiimage

11
推荐指数
1
解决办法
1251
查看次数

"xxx在一台设备上没有有效的com.apple.developer.ubiquity-kvstore-identifier权利"

我正在测试使用iCloud键值存储的支持iCloud的应用程序.

我在iPad和iPod上测试它,都运行5.1.1.

今天,没有明显的理由,在iPad上(以及仅在iPad上)运行会导致显示消息"xxx没有有效的com.apple.developer.ubiquity-kvstore-identifier权利",我无法访问键值store,这意味着我无法在该设备上运行App.

访问iCloud文件疮工作正常.

配置profie没有改变,授权文件没有改变,项目和目标设置没有改变,代码仍然在iPod上正常运行.

所有设备只有一个目标.

从iPad上删除应用程序并重新安装它无济于事.产品清洁没有帮助.从Xcode管理器中删除iPad并重新启用它无济于事.从iCloud中删除所有应用程序的数据无济于事.据我所知,没有任何帮助.

有任何想法吗?

iphone ipad ios icloud

9
推荐指数
1
解决办法
4773
查看次数

发送尝试失败后推特结果错误

TWTweetComposeViewController在IOS5中使用撰写和发送推文时,如果推文是重复的,则会显示错误警告,说明推文是重复的并且无法发送,但TWTweetComposeViewControllerCompletionHandler仍然得到结果值TWTweetComposeViewControllerResultDone而不是TWTweetComposeViewControllerResultCancelled.

(这种情况也可能发生在其他情况下,不仅仅是重复的推文 - 我没有检查).

这使得在成功发送后无法向用户显示确认消息,因为无论发送是否成功,处理程序都会获得相同的"完成"结果.

有没有其他方法来检查发送是否真的成功?

twitter ios ios5

8
推荐指数
1
解决办法
756
查看次数

在UITableViewCell中,新的IOS5 UISwitch看起来没有禁用

UISwitchUITableViewCells中放置一个es ,我最初尝试禁用它:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    ...
    self.switch = [[UISwitch alloc] init];
    self.switch.enabled = NO;
    cell.accessoryView = self.switch;
    ...
}
Run Code Online (Sandbox Code Playgroud)

在IOS5之前的IOS版本中,(旧视)开关被禁用,并且在视图出现时也看起来被禁用(变暗).

在IOS5中,(新的)开关被禁用,我无法翻转,但在此阶段看起来没有禁用.它与启用的开关具有相同的亮度.

如果我稍后在代码中启用并重新禁用它(不在cellForRowAtIndexPath:回调中),它看起来会被禁用(变暗).

我做错了什么或者这是IOS5中的错误?

iphone uiswitch ios ios5

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

在iPad上从UIBarButtonItem中删除UIActionSheet

我有UIToolbar几个UIBarButtonItems显示各种UIActionSheets使用showFromBarButtonItem:.

在iPad上,当其中一个动作表出现在屏幕上时,触摸动作表外的任何位置都会将其删除而不执行任何操作(例如,触摸按钮不会触发按钮).这是设计 - 我不满意的东西,但我接受它,只要它是通常的行为.

但有一个例外.如果我触摸另一个UIBarButtonItem按钮,则会触发此按钮并且不会从屏幕上删除当前操作表.如果新按钮恰好启动另一个按钮UIActionSheet,我最终会在屏幕上显示两个(或更多)操作表.

当然,我可以通过一个繁琐的过程来记住屏幕上的内容并手动解除它,但我也关注用户,因为一些触摸(那些以工具栏按钮为目标)被尊重而其他人被忽略.

有什么我可以做或者我必须忍受这种情况吗?

uibarbuttonitem uiactionsheet ipad ios

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

UITabBarItem.title与UINavigationController.title

我分配了一个带标题的UITabBarItem(initWithTitle)并将其连接到UINavigationController.

我发现如果导航控制器的根视图控制器有自己的标题,那么该标题将永久替换标签栏项目上指定的标题.例如,如果标签栏项目的标题设置为ONE并且导航控制器的根视图控制器标题设置为TWO,则标签栏项目始终显示TWO,而不是ONE.使标签栏项目显示为ONE的唯一方法是完全省略导航控制器的根标题.

问题是,我希望每个都有不同的标题,因为标签栏项并不总是通向导航控制器的根视图控制器 - 它显示了推送到导航控制器的最后一个视图控制器,这意味着根的标签栏上的标题可能不合适.另一方面,我不能在导航控制器中丢弃标题,因为它在导航栏上使用.Catch 22.

有没有解决的办法?

iphone xcode uinavigationcontroller uitabbaritem

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

带有自定义rightView的UITextField中的宽度问题

我有一个UITextField(放在一个内部UITableViewCell)有UIButton一个自定义rightView:

    UITextField *textField = [[[UITextField alloc] initWithFrame:CGRectMake(10.0, 1.0, cell.bounds.size.width - 20.0, 31.0)] autorelease];
    textField.autoresizingMask = UIViewAutoresizingFlexibleWidth;
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    button.bounds = CGRectMake(0.0, 0.0, 27.0, 31.0); // Probably not needed, doesn't change anything
    button.frame = CGRectMake(0.0, 0.0, 27.0, 31.0);
    [button setImage:[UIImage imageNamed:@"27x31.png"] forState:UIControlStateNormal];
    textField.rightView = button;                                
    textField.rightViewMode = UITextFieldViewModeUnlessEditing;
Run Code Online (Sandbox Code Playgroud)

显示文本字段时,不会按预期处理触摸:

  • 如果我触摸按钮,它会被触发.
  • 如果我触摸靠近按钮左边缘的区域(但在其边界之外),仍然会触发该按钮.
  • 如果我想编辑文本字段中的文本而不是触发按钮,我必须进一步向左触摸.

如果我将设备旋转到横向模式,情况会变得更糟.在这种情况下,按钮左侧仍然触发按钮的区域较宽,并且该区域左侧有一个间隙,它不执行任何操作 - 按钮未被触发且文本未被编辑.在这种情况下,我必须向左移动以编辑文本.

仅当字段中的当前文本很短时才会发生这种情况.如果文本填充文本字段,则按预期处理触摸(触摸按钮左侧任何位置以纵向和横向编辑文本).

我试图覆盖textRectForBounds,editingRectForBounds并且rightViewRectForBounds.我验证它们被调用并返回正确的值,但它们不会改变任何东西(只要返回值是正确的).

有任何想法吗?

iphone xcode uitextfield

5
推荐指数
2
解决办法
3708
查看次数

偶尔“非法尝试在不同上下文中的对象之间建立关系 '...'”

我们偶尔会从我们的用户那里得到崩溃报告(我们正在使用一个崩溃报告包,将崩溃发送到我们的服务器),并显示以下错误:

“非法尝试在不同上下文中的对象之间建立关系 '...'”

(不同的报告可能有不同的关系,并不是所有的报告都一样)。

这似乎很容易,除了:

  1. 我们的代码中只有一个 NSManagedObject——来自 App 委托的单例。

  2. 除了主线程,我们不使用任何线程。

  3. 所有对象都是使用上下文 using 分配的initWithEntity:insertIntoManagedObjectContext:(它们都不是用简单的 init 分配的)。

  4. 在我们的测试(数千次运行)中从未发生过错误。

所以基本上我们被卡住了。

任何想法将不胜感激。

iphone core-data ipad nsmanagedobjectcontext

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

UINavigationController的子边界/框架?

我推ViewController到一个NavigationController没有设置它的frame.

即使新视图按预期显示在导航栏下方,其边界属性也会显示整个屏幕尺寸减去状态栏({0, 0}, {320, 460}在iPhone上),其框架从状态栏下方开始,而不是在导航栏({0, 20}, {320, 460})下方.

如何从孩子的内部得到实际的边界和框架ViewController

iphone xcode uinavigationcontroller

4
推荐指数
1
解决办法
1289
查看次数