经过长时间的iPhone工作后,我回到Mac上的Cocoa开发中.我之前在Mac上使用Cocoa的经历只是一些小巧的工具.我想要建立一些严肃的东西.
查看像iPhoto(或Mail或Things或......)这样的现代Cocoa应用程序,许多应用程序使用基于单窗口,源列表的方法.我试图尽我所能地绕过那个,因为它似乎提供了一个很好的体验.但是,我有点麻烦.这是我认为应该如何看待,但我想知道其他人是如何做到的,以及最好的方法是什么:
应用程序的起点是一个AppDelegate对象,在启动后,从一个笔尖创建一个Window [Controller?],同时设置其数据(来自CoreData)
WindowController加载一个基本上只有NSSplitView的窗口.
splitview的左侧有一个NSTableView或NSOutlineView,它被设置为具有SourceList样式.
右侧具有应用程序的主要内容,具体取决于选择的表视图的哪个项目.
我会假设某处(哪里?)有NSViewControllers管理将出现在右侧的每个不同视图(想想iPhoto如何拥有所有照片,事件,面孔,地方等等,我想他们都可以出现在不同的笔尖中... 它是否正确?).
那些视图控制器可能绑定到左侧的源列表..这是如何工作的(源列表由NSViewControllers的NSArrayController支持?).
无论如何,那些是我的想法,我是完全偏离基础还是......?我环顾网络,在这里发现这篇文章,我看了一些Apple的源代码,但我似乎无法绕过它.欢迎任何指导.
architecture cocoa interface-builder cocoa-bindings nsviewcontroller
如果您的公共界面中有属性,如下所示
@interface MyClass : NSObject
@property(strong) NSString *myProp;
@end
Run Code Online (Sandbox Code Playgroud)
然后合成它,实际上合成变量:
@implementation MyClass
@synthesize myProp = _myProp; // or just leave it at the default name..
@end
Run Code Online (Sandbox Code Playgroud)
实例变量的可见性是_myProp多少?也就是说,这是考虑过@public,@protected还是@private?我猜是因为MySubClass可以从那时继承MyClass它也会得到属性(自然),但是它还会继承实例变量可见性吗?
如果我将属性放在类扩展中会有什么不同?这会将属性隐藏在子类中,我也猜测实例变量.这记录在哪里?
我正在Proto.framework为Swift中的OS X 编写动态Framework().我想要包含一个libstat.a用Objective C编写的静态库()中的代码.这就是我所拥有的:
// Dynamic.swift in Proto.framework
class Dynamic {
func doSomethingWithStat() {
Stat().statThing()
}
}
// Stat.h in libstat.a static library
@interface Stat : NSObject
- (void)statThing;
@end
// Stat.m
@implementation Stat
- (void)statThing {
NSLog(@"OK");
}
@end
Run Code Online (Sandbox Code Playgroud)
在我的Proto.framework目标中,我将它链接到libstat.a.当我尝试构建Proto时,自然它无法编译,因为它找不到定义Stat().statThing().它不知道我的静态库的符号.我该怎么说呢?
对于应用程序,我会使用桥接头#import <Stat/Stat.h>.但编译器错误并告诉我Bridging headers aren’t allowed in frameworks.好.
所以我把它包含在我的"伞头"(Proto.h)中,但这告诉我error: include of non-modular header inside framework module.好.
即使在干净的构建之后,使我的Stat库目标Defines module: YES似乎也不会改变错误.所以我不知道该怎么做.
有人能指出我正确的方向吗?
我想知道,根据经验(和原始人口数据),这是应用程序的5个"最佳"本地化(在这种情况下是iPhone应用程序).通过本地化注意我不仅仅指语言,还包括日期和货币格式等其他习惯.
我的猜测列表如下
您的列表如何比较?为什么?
我UIScrollView启用了分页功能,并且我已添加了自己的分页功能UIPanGestureRegonizer.在某些情况下,我的视图控制器将设置scrollview.scrollEnabled = NO,然后添加平移手势识别器(我没有使用scrollview自己的识别器).
因此,滚动被禁用但我正在等待来自我的手势识别器的用户触摸.当它识别时,它会调用其重新启用滚动的操作.
问题是,当用户仍然用手指按下时,我的滚动视图不会用手指跟踪.在手指抬起然后再次拖动之前,它不会开始滚动.因此,我的手势识别器正在吞咽所有触摸而不是转发任何滚动视图.
我试过切换panGestureRecognizer.cancelsTouchesInView = NO;但它似乎没有任何影响(我正在重新启用滚动时我正在删除此识别器但是我是否这样做并不能解决我的问题).我也研究了它们的delays...属性,UIGestureRecognizer但它们似乎也没有帮助.
有任何想法吗?如何让这些事件继续转发到我的滚动视图?
我有一个NSTextView子类充当其NSTextStorage委托.我正在尝试做两件事:
我在两种不同的方法中执行此操作,这两种方法都由- (void)textStorageWillProcessEditing:(NSNotification *)notification委托回调调用.
我可以很好地进行语法突出显示,但是当附加我的答案时,插入点会跳到行的末尾,我不知道为什么.我的评估方法如下所示:
NSString *result = ..;
NSRange lineRange = [[textStorage string] lineRangeForRange:[self selectedRange]];
NSString *line = [[textStorage string] substringWithRange:lineRange];
line = [self appendResult:result toLine:line]; // appends the answer
[textStorage replaceCharactersInRange:lineRange withString:line];
Run Code Online (Sandbox Code Playgroud)
这样做会很好地追加我的结果,但问题是,如上所述,插入点会跳到最后.
我试过了:
[textStorage beginEditing]和-endEditing.我这样做了吗?我试图以最少的hackish方式做到这一点,我也不确定这是否是进行解析/突出显示的理想场所.文档让我相信这一点,但也许这是错的.
我正在开发针对Leopard及以上版本的Cocoa应用程序,我正在考虑添加一个崩溃记者(我想我的应用程序不会崩溃,但让我们在这里变得真实).在我真正开始之前,我有一些主要的概念性问题.
1)这是如何在概念上发挥作用的,知道什么时候发生了撞车事故并培养了一名记者?我有一个守护程序正在运行寻找崩溃,还是我等到我的应用程序下次启动报告?
2)这可以在Cocoa中完成吗?或者我是否需要使用Carbon或IOKit或其他类似的东西?
3)这是一个好主意吗?Mac OS X已经有一个内置的崩溃报告器,但作为开发人员,我无法看到崩溃日志.坦率地说,我认为我的应用程序不会经常崩溃,但我只是不想天真但是这样的事情.
你对此有何看法和看法?
我正在使用我NSFetchedResultsController的数据来驱动数据UITableViewController.我正在获取的托管对象的简化版本看起来像这样(例如):
Person:
-(BOOL)hasPet;
-(BOOL)hasDog;
Run Code Online (Sandbox Code Playgroud)
基本上,我希望我的桌子只显示那些Person有宠物的物品.这很简单,我可以使用谓词.现在,对于那些hasPet == YES我想把它们放在表中的第一部分hasDog == YES,第二部分,第二部分hasDog == NO.这是我有点模糊的地方.这是我配置结果控制器的地方,希望有人可以帮助引导我朝着正确的方向前进.
- (NSFetchedResultsController *)fetchedResultsController {
if (nil != fetchedResultsController) {
return fetchedResultsController;
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Homework" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"hasPet == %@", [NSNumber numberWithBool:YES]];
[fetchRequest setPredicate:predicate];
NSSortDescriptor *dogDescriptor = [[NSSortDescriptor alloc] initWithKey:@"hasDog" ascending:YES];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:dogDescriptor, …Run Code Online (Sandbox Code Playgroud) core-data objective-c uitableview nsfetchedresultscontroller ios
我有一个NSSplitView在左侧我有一个tableView(像源列表),根据行选择,我想改变拆分视图的右侧.我无法弄清楚如何做到这一点.
当我将我想要的子视图添加到splitview时,它会添加另一个分割(所以现在共有3个视图...不是我想要的).
[mySplitView addSubview:myCustomView];
Run Code Online (Sandbox Code Playgroud)
如何正确设置splitView的右侧?
更新
运用
[mySplitView replaceSubview:[[mySplitView subviews] objectAtIndex:1] withSubview:myCustomView]
Run Code Online (Sandbox Code Playgroud)
似乎工作,但它正在调整拆分视图,相当奇怪,我怎么能阻止这个?在IB中有一个关闭选项,autoResizesSubviews但我不能取消选中.有任何想法吗?
我正在尝试创建一个自定义NSWindow,所以我用一个合适的无边框窗口掩码创建了一个自定义.我提供自己的内容视图很好.但我想要做的是绘制圆角,也可以将子视图剪切到那些角落.这可能吗?
在我的内容视图中,我可以覆盖drawRect:并绘制带圆角的路径,但是当我向其添加子视图时,它们不会被剪裁.
我可以改为使我的内容视图支持图层并给它一个角半径(masksToBounds设置为YES)但是当我添加子视图时,它们仍然没有被我的圆角修剪.
有没有办法做到这一点?或者某种方式来绘制一个没有标题栏的NSWindow并且我可以完全控制绘图,并保持圆形的剪裁角落?
cocoa ×6
objective-c ×4
ios ×2
macos ×2
architecture ×1
calayer ×1
core-data ×1
frameworks ×1
iphone ×1
localization ×1
nssplitview ×1
nstableview ×1
nstextview ×1
nswindow ×1
properties ×1
swift ×1
uiscrollview ×1
uitableview ×1