我已将游戏中心(GC)整合到我的游戏中.它的效果非常好,除了恼人的消息,它可以在激烈的动作中弹出,需要玩家100%的注意力:
"无法连接到Game Center服务器.取消/重试?"
我不介意这个消息,但信息不是那么迫切,必须立即显示.我希望在用户导航到主菜单或其他某个点后显示它.有没有办法实现它?
根据Apple自己的建议,当手动设置符合KVC/KVO标准的访问器时,应该包括BOTH KVO方法willChange和didChange.这就是我在所有手动访问器方法中所做的.
然而,observeValueForKeyPath:ofObject:change:context使用完全相同的字典内容来调用KVC方法的每一半(将要和做过).
当使用选项注册观察者时:NSKeyValueObservingOptionPrior观察者仍然被调用两次 - 每半次一次 - 并且再次使用相同的字典内容,仅保存字典中包含键'notificationIsPrior'的差异.
现在,当KVO用于改变"CPU价格昂贵"的属性时 - 比如改变颜色或重新绘制大而精细的设计,只有对'didChange'采取行动并忽略(或至少分离出)'willChange才有意义".在过去,我通过将密钥字符串转换为枚举列表元素来实现此目的,该元素返回左移'1'并使用该数字在收到第一个调用时设置32或64位整数的标志标志在第二个重置,我执行CPU密集型操作.
然而,令我感到震惊的是,对于每个案例来说,这都是一个非常重要的开销.有没有人有任何其他'首选'的方法来区分'willChange'和'didChange'的回调而不允许两次完成相同的处理?
我已经仔细搜索了Apple自己的文档和这个帮助小组的大量替代品,但Apple自己的doc实际上并没有详细介绍这个主题,而且这个小组中的一些人也有类似的问题摔跤.在任何情况下都没有提供确定的解决方案.如果有人知道更好的方式 - 除了用交替的旗帜躲避'willChange' - 我会非常感激.(为什么Apple不能在更改字典中包含'阶段'键?)
我有一个NSCollectionView (OS X,而不是iOS)绑定到我的模型.每个集合视图项都有一个按钮和一个标签.我正在处理点击操作,我有sender和event参数,但我无法区分一个按钮与其他按钮.大多数其他不处理集合视图的问题都说使用该tag属性,但这不会在Interface Builder的绑定选项卡上公开.有一个Argument和Argument2绑定,但它们似乎不对应tagobjc代码中的属性,我不知道如何以其他方式访问这些参数.
-(void)image_click:(id)sender forEvent:(NSEvent *)event
{
NSButton *btn = sender;
NSLog(@"image clicked, %ld", (long)btn.tag); //image clicked, 0
}
Run Code Online (Sandbox Code Playgroud)
如何在集合视图中的一组按钮的单击操作中区分Objective-C代码中的按钮?
我有一个动画,当手势识别器(双击)触发时,它会被踢掉:
[UIView animateWithDuration:0.3 animations:^{
_scrollView.contentOffset = CGPointMake(x, y);
_scrollViewContentView.frame = someFrame;
_scrollViewContentView.layer.transform =
CATransform3DMakeScale(1.f/_zoomScale, 1.f/_zoomScale, 1.f);
}];
Run Code Online (Sandbox Code Playgroud)
除了一种情况之外它工作得很好:如果scrollViewWillBeginDecelerating在动画执行之前没有调用委托方法(只是拖动几乎我的scrollview).
我只是有scrollViewDidEndDragging方法叫.我可以等20秒,然后播放我的动画.它会正常播放,除了我的contentOffset.
委托方法本身什么都不做,只是添加它们才能看出问题所在.
我不知道为什么.
编辑:这是我的问题视频.第1阶段:减速滚动,第2阶段没有.看看最后的位置.阶段1是正确的但不是阶段
objective-c uiscrollview ios contentoffset animatewithduration
我有UITableView选择的问题.如果单击编辑按钮,TableView将进入编辑模式并丢失当前选择.
如何在不丢失选择的情况下进入编辑模式?
- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath
{
// Return NO if you do not want the specified item to be editable.
return YES;
}
Run Code Online (Sandbox Code Playgroud) 我在文件目录中创建一个名为newFolder的文件夹.现在我想知道如何在我的文件夹中创建txt文件,这是用newFolder创建我现在如何在文件目录中创建文件,但如何在我的文件夹中创建文件,这是由我创建.我想从newFolder获取此文件并传递给iPhone中的邮件编辑器.
这是我的文档文件夹中的创建文件夹,但现在我想在此文件夹名称中创建文件newFolder帮助我.
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *dataPath = [documentsDirectory stringByAppendingPathComponent:@"newFolder"];
NSError *error = NULL;
if (![[NSFileManager defaultManager] fileExistsAtPath:dataPath])
[[NSFileManager defaultManager] createDirectoryAtPath:dataPath withIntermediateDirectories:NO attributes:nil error:&error];
Run Code Online (Sandbox Code Playgroud)
我写这个代码,但我的csv文件是在doument diretory文件夹中创建我想在我的文件夹中创建这个文件,这是doument目录有名称newFolder
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDir = [paths objectAtIndex:0];
NSString *filename = [docDir stringByAppendingPathComponent:[NSString stringWithFormat:@"EmployeeBase.Csv"]];
NSError *error = NULL;
BOOL written = [csvString writeToFile:filename atomically:YES encoding:NSUTF8StringEncoding error:&error];
if (!written)
NSLog(@"write failed, error=%@", error);
Run Code Online (Sandbox Code Playgroud) 我有一个故事板,其中包含来自表格单元格的segue.我想在选择行时使用某些数据设置一些属性,所以我执行以下操作:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[[ProperyManager sharedPropertyManager]setSelectedRow:[verseIds objectAtIndex:indexPath.row]];
[[ProperyManager sharedPropertyManager]setID:[poemIDs objectAtIndex:indexPath.row]];
[[ProperyManager sharedPropertyManager]setRowToReturn:[NSString stringWithFormat:@"%i",indexPath.row]];
}
Run Code Online (Sandbox Code Playgroud)
问题是,目标视图控制器的视图控制器生命周期方法(viewWillAppear等)在上面的didSelectRow方法之前被调用,因为segue在执行委托方法之前推送视图.
我怎么能绕过这个?
我们有一堆不同类型的 NSManagedObjects。其中一些具有其他 NSManagedObjects 的 NSSet 成员。问题是我真的需要覆盖集合中对象的哈希和 isEquals 方法 - 但它们是 NSManagedObjects。我在获取集合中的多个相同对象时遇到问题。据我所知,由于哈希默认为对象地址 - 所有对象都不同。所以我需要覆盖 hash 和 isEquals - 但看不到任何方法。
我们拥有的是系统中的一堆东西,更多的东西是通过 XML 进来的——有时是现有对象的重复。当它们相同时,我不希望将重复添加到集合中。
我想全局定义一个宏.我想覆盖NSLocalizedString()整个项目.这可能吗,我该怎么办?
我有一个名为"TaskTable"的UITableView,我在这个方法的TaskTable的每个单元格的contentview中添加了一个标签
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
Run Code Online (Sandbox Code Playgroud)
我的标签标签是50,我在表格视图的构建单元格中使用,而不是自定义单元格.
现在,当我尝试使用此代码从TaskTable中删除我的标签时:
for(UILabel *lbl in [cell subviews])
{
if(lbl.tag == 50)
{
[lbl removeFromSuperview];
}
}
Run Code Online (Sandbox Code Playgroud)
如果条件,代码不会输入此.为什么找不到标签?这是因为我使用内置单元格只找到自己的文本标签,或者还有其他一些我遗漏的问题?
ios ×8
objective-c ×5
iphone ×3
uitableview ×2
callback ×1
cocoa ×1
game-center ×1
hash ×1
macros ×1
nsset ×1
storyboard ×1
tableview ×1
uiscrollview ×1
xcode ×1