FMDB Wrapper VS核心数据:哪个更易于使用和维护?
我很困惑,因为FMDB很老,但仍然有很多开发人员正在使用它,而Core Data是新的,只有3.0及更高版本的sdk支持.
有人说FMDB很容易使用,有些人说核心数据.请帮助我,这样我就可以朝着正确的方向前进.
提前致谢
我想做的事情的精髓是这样的:
public struct HolderOfWrappers
{
let anyWrappedItem: MyResource<Any>
}
public struct MyResource<A>
{
let wrappedItem : A
let convert: String -> A
}
func holdResource<A>( resource: MyResource<A> ) -> HolderOfWrappers
{
// Error on this line, A is not Any...
let wrapHolder : HolderOfWrappers = HolderOfWrappers( resource )
return wrapHolder
}
Run Code Online (Sandbox Code Playgroud)
就目前情况而言,这段代码在holdResource我尝试构建的最后一个方法中产生了编译器错误HolderOfWrappers:
Cannot convert the expression's type 'MyResource<A>' to type '(anyWrappedItem: MyResource<Any>)'
Run Code Online (Sandbox Code Playgroud)
这是可以理解的,因为代码表明 HolderOfWrappers 只能保存为 Any 类型构建的 MyResource,而不是任何可能的类型。我真正想要的HolderOfWrappers是这样的:
public struct HolderOfWrappers
{
let anyWrappedItem: …Run Code Online (Sandbox Code Playgroud) 我是OS X下Aquamacs的用户,默认情况下不会将.m文件识别为Objective-C,而是将它们视为matlab文件 - 来自邮件列表,其原因是维护者感觉到在他向分销中添加解决方案之前,他想要一种清晰的方法来区分Obj-C文件和其他文件.
因此,我试图提出一个适当的魔术模式,有助于正确识别Objective-C文件并切换到正确的模式 - 经过一番思考,似乎所有我需要检查的是存在三个关键字之一:
@implementation
@interface
@protocol
Run Code Online (Sandbox Code Playgroud)
任何Objectve-C文件都应该包含其中一个字符串,并且它们很可能不会出现在Matlab文件中.
然后我尝试用魔法模式alist变体来识别@implementation,我的第一次尝试是:
(add-to-list
'magic-mode-alist
'(".*^\@implementation.*" . objc-mode))
Run Code Online (Sandbox Code Playgroud)
基本上 - 在行的开头检查文件中任何位置的@implementation.
将它放入我的.emacs文件之后,似乎没有任何效果 - 在其中打开带有@implementation的.m文件,没有切换到Obj-C模式.
有谁知道我的魔术模式alist条目可能是什么问题?我能找到的唯一例子只是在文件的最开头匹配文本(对于nxml模式),而不是文件中间的字符串.似乎我的正则表达式一定有问题,但正如所指出的,同一主题的一些变体似乎没有效果.
我的.emacs文件中的工作条目为auto-mode-alist提供了今天的正确模式所以我不需要任何关于如何做到这一点的建议,我想以"正确"的方式解决这个问题.
编辑:
感谢下面接受的响应,这是我在.Emacs文件中的最终代码:
(setq magic-mode-alist
(append (list
'("\\(.\\|\n\\)*\n@implementation" . objc-mode)
'("\\(.\\|\n\\)*\n@interface" . objc-mode)
'("\\(.\\|\n\\)*\n@protocol" . objc-mode))
magic-mode-alist))
Run Code Online (Sandbox Code Playgroud)
请注意,我使用"\n"替换正则表达式中的"^"(行首),因为准确确定类型很重要 - 否则.emacs文件本身会以obj-c模式出现,因为@实施在那里.
我发现其他需要注意的事情是,魔术模式alist只在一个文件的开头被赋予一定数量的字符(由magic-mode-regexp-match-limit默认的4000个字符定义),可能是出于性能原因.通常情况下,这足以找到开头@implementation或@interface块,但如果您像某些人一样在文件的标题中插入修订注释,则可能需要大幅增加.就像备份一样,我计划也包含使用auto-mode-alist使.m文件始终以obj模式打开的代码,因为我的Matlab时代远远落后于我 - 但希望这种魔法模式的改变可以进入官方发布的Aquamacs至少,如果不是Emacs 23本身(正则表达可能应该加强一点,为此发生).
任何人都可以解释为什么在使用GUI和xcodebuild命令行编译相同的XCode 4.x项目时会得到不同的结果?
XCode GUI
xcodebuild联编
导致以下错误:
/Developer/usr/bin/gcc-4.0 -x目标c -arch I386 -fmessage长度= 0 -pipe -std = gnu99 -Wno-三合字母-fpascal串-fasm块-Wreturn -Os型-Wunused -variable -isysroot /Developer/SDKs/MacOSX10.4u.sdk -fvisibility = hidden -mmacosx-version-min = 10.4 -c"/Users/XXX/Extensions/NSFileManager_Extensions.m"-o"/ Users/XXX/Developer/Intermediates/YourApp.build/Release/YourApp.build/Objects-normal/ppc/NSFileManager_Extensions.o"/Users/XXX/Extensions/NSFileManager_Extensions.m:15:60:error:ToxicRegularExpressions/ToxicRegularExpressions.h:没有这样的文件或目录**建筑失败**
以下构建命令失败:CompileC"/Users/XXX/Developer/Intermediates/YourApp.build/Release/YourApp.build/Objects-normal/ppc/NSFileManager_Extensions.o"/Users/XXX/Extensions/NSFileManager_Extensions.m normal ppc objective -c com.apple.compilers.gcc.4_0
最后是GUI + xcodebuild
这个问题实际上是在寻找我知道存在但却找不到的特定类.
几周前,我读了一篇文章,概述了一个使用KVC的帮助类 - 它允许你封装KVC订阅,这样你就可以观察到多个值,而不必经过相同的hander方法,并且还清理了KVC观察者更安全(因为KVC清理非常挑剔且容易出现异常).
所以,在回复中,我正在寻找之前遇到过的助手类,或其他尝试包装KVC以使其更安全和更适合一般用途的例子.
我正在为一个客户开发一个应用程序,他将在一个董事会中向一组董事展示它以进行认真的演示.因为iPhone非常小,让他在实际设备上演示应用程序是没有意义的,因为没有人会看到任何东西.
是否可以在计算机或电视上输出屏幕,以便房间里的每个人都能看到正在发生的事情?
我正在尝试使用非常简单的自定义地图注释视图和标注 - 我创建它时的注释视图,只是将UIImageView作为子视图添加到自身.这很好.
但是,当我在注释视图上调用canShowCallout时,在返回视图后立即在MapKit中抛出异常.堆栈的结尾如下:
#0 0x94e964e6 in objc_exception_throw
#1 0x01e26404 in -[MKOverlayView _addViewForAnnotation:]
#2 0x01e22037 in -[MKOverlayView _addViewsForAnnotations:animated:]
#3 0x01e1ddf9 in -[MKOverlayView showAddedAnnotationsAnimated:]
#4 0x01df9c0e in -[MKMapView _showAddedAnnotationsAndRouteAnimated:]
#5 0x01e0371a in -[MKMapView levelView:didLoadTile:]
Run Code Online (Sandbox Code Playgroud)
我的viewForAnnotation非常简单:
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id <MKAnnotation>)annotation
{
if ( ! [annotation isKindOfClass:[MyAnnotation class]] )
return nil;
MyAnnotationView *useView = (MyAnnotationView *)[myMapView dequeueReusableAnnotationViewWithIdentifier:@"resuseview"];
if ( useView == nil )
{
useView = [[[MyAnnotationView alloc] initWithAnnotation:annotation reuseIdentifier:@"resuseview"] autorelease];
useView.canShowCallout = YES; // if commented out view appears just …Run Code Online (Sandbox Code Playgroud) 我今天更新到Xcode 4,我的自定义文本宏不再有效.我找不到有关如何使用Xcode 4自定义宏的任何信息.这还有可能吗?如果有人提出解决方案,请告诉我.
这是我目前拥有"ObjectiveC.xctxtmacro"文件的目录.〜/ Library/Application Support/Developer/Shared/Xcode/Specifications
给出以下代码
@interface MyClass
{
SomeObject* o;
}
@property (nonatomic, retain) SomeObject* o;
@implementation MyClass
@synthesize o;
- (id)initWithSomeObject:(SomeObject*)s
{
if (self = [super init])
{
o = [s retain]; // WHAT DOES THIS DO? Double retain??
}
return self
}
@end
Run Code Online (Sandbox Code Playgroud)