CoreData
CoreData
使用级联删除规则,实体"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秒有效.
但我不想依赖这种延迟.这是一个没有太多数据的测试环境,我不知道在生产环境中会发生什么.依靠实验性延迟似乎不是正确的做法.
有没有正确的事情?或者我开始做错了什么?
我有一个[UIButton buttonWithType:UIButtonTypeCustom]
图像(或背景图像 - 相同的问题),通过[UIImage imageWithContentsOfFile:]
指向相机拍摄的JPG文件创建,并由应用程序保存在文档文件夹中.
如果我UIControlStateNormal
仅定义图像,那么当我触摸按钮时,图像会像预期的那样变暗,但它也会旋转90度或180度.当我移开手指时,它恢复正常.
如果我使用相同的图像UIControlStateHighlighted
,这不会发生,但后来我失去了触摸指示(较暗的图像).
这只发生在从文件中读取的图像时.它不会发生[UIImage ImageNamed:]
.
我尝试以PNG格式而不是JPG格式保存文件.在这种情况下,图像以错误的方向显示,并且在触摸时不会再次旋转.无论如何,这不是一个好的解决方案,因为PNG太大而且处理起来很慢.
这是一个错误还是我做错了什么?
我正在测试使用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中删除所有应用程序的数据无济于事.据我所知,没有任何帮助.
有任何想法吗?
当TWTweetComposeViewController
在IOS5中使用撰写和发送推文时,如果推文是重复的,则会显示错误警告,说明推文是重复的并且无法发送,但TWTweetComposeViewControllerCompletionHandler
仍然得到结果值TWTweetComposeViewControllerResultDone
而不是TWTweetComposeViewControllerResultCancelled
.
(这种情况也可能发生在其他情况下,不仅仅是重复的推文 - 我没有检查).
这使得在成功发送后无法向用户显示确认消息,因为无论发送是否成功,处理程序都会获得相同的"完成"结果.
有没有其他方法来检查发送是否真的成功?
我UISwitch
在UITableViewCell
s中放置一个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中的错误?
我有UIToolbar
几个UIBarButtonItem
s显示各种UIActionSheet
s使用showFromBarButtonItem:
.
在iPad上,当其中一个动作表出现在屏幕上时,触摸动作表外的任何位置都会将其删除而不执行任何操作(例如,触摸按钮不会触发按钮).这是设计 - 我不满意的东西,但我接受它,只要它是通常的行为.
但有一个例外.如果我触摸另一个UIBarButtonItem
按钮,则会触发此按钮并且不会从屏幕上删除当前操作表.如果新按钮恰好启动另一个按钮UIActionSheet
,我最终会在屏幕上显示两个(或更多)操作表.
当然,我可以通过一个繁琐的过程来记住屏幕上的内容并手动解除它,但我也关注用户,因为一些触摸(那些以工具栏按钮为目标)被尊重而其他人被忽略.
有什么我可以做或者我必须忍受这种情况吗?
我分配了一个带标题的UITabBarItem(initWithTitle)并将其连接到UINavigationController.
我发现如果导航控制器的根视图控制器有自己的标题,那么该标题将永久替换标签栏项目上指定的标题.例如,如果标签栏项目的标题设置为ONE并且导航控制器的根视图控制器标题设置为TWO,则标签栏项目始终显示TWO,而不是ONE.使标签栏项目显示为ONE的唯一方法是完全省略导航控制器的根标题.
问题是,我希望每个都有不同的标题,因为标签栏项并不总是通向导航控制器的根视图控制器 - 它显示了推送到导航控制器的最后一个视图控制器,这意味着根的标签栏上的标题可能不合适.另一方面,我不能在导航控制器中丢弃标题,因为它在导航栏上使用.Catch 22.
有没有解决的办法?
我有一个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
.我验证它们被调用并返回正确的值,但它们不会改变任何东西(只要返回值是正确的).
有任何想法吗?
我们偶尔会从我们的用户那里得到崩溃报告(我们正在使用一个崩溃报告包,将崩溃发送到我们的服务器),并显示以下错误:
“非法尝试在不同上下文中的对象之间建立关系 '...'”
(不同的报告可能有不同的关系,并不是所有的报告都一样)。
这似乎很容易,除了:
我们的代码中只有一个 NSManagedObject——来自 App 委托的单例。
除了主线程,我们不使用任何线程。
所有对象都是使用上下文 using 分配的initWithEntity:insertIntoManagedObjectContext:
(它们都不是用简单的 init 分配的)。
在我们的测试(数千次运行)中从未发生过错误。
所以基本上我们被卡住了。
任何想法将不胜感激。
我推ViewController
到一个NavigationController
没有设置它的frame
.
即使新视图按预期显示在导航栏下方,其边界属性也会显示整个屏幕尺寸减去状态栏({0, 0}, {320, 460}
在iPhone上),其框架从状态栏下方开始,而不是在导航栏({0, 20}, {320, 460}
)下方.
如何从孩子的内部得到实际的边界和框架ViewController
?