我已经查看了Ruby on Rails指南,我似乎无法弄清楚如果有父级记录,如果有人删除父记录.例如.如果我的数据库有CUSTOMERS并且每个客户可以有多个ORDERS,我想阻止有人在数据库中有任何订单时删除客户.如果客户没有订单,他们应该只能删除客户.
在定义模型之间的关联以强制执行此行为时,有没有办法?
是否在Objective-C中使用"自我"或者只是一个好习惯?我一直没有使用它而根本没有使用它,我似乎没有注意到任何差异.反正不是暗示吗?
我试图在PostgreSQL 8.2中编写一个触发器函数,它将动态使用TG_TABLE_NAME来生成和执行SQL语句.我可以为PostgreSQL的更高版本找到各种各样的例子,但由于一些要求,我被困在8.2上.这是我的功能,因为它有效,但几乎没有动态:
CREATE OR REPLACE FUNCTION cdc_TABLENAME_function() RETURNS trigger AS $cdc_function$
DECLARE
op cdc_operation_enum;
BEGIN
op = TG_OP;
IF (TG_WHEN = 'BEFORE') THEN
IF (TG_OP = 'UPDATE') THEN
op = 'UPDATE_BEFORE';
END IF;
INSERT INTO cdc_test VALUES (DEFAULT,DEFAULT,op,DEFAULT,DEFAULT,OLD.*);
ELSE
IF (TG_OP = 'UPDATE') THEN
op = 'UPDATE_AFTER';
END IF;
INSERT INTO cdc_test VALUES (DEFAULT,DEFAULT,op,DEFAULT,DEFAULT,NEW.*);
END IF;
IF (TG_OP = 'DELETE') THEN
RETURN OLD;
ELSE
RETURN NEW;
END IF;
END;
Run Code Online (Sandbox Code Playgroud)
这是当前编写的方式,我将不得不为每个表编写一个单独的触发器函数.我想使用TG_TABLE_NAME来动态构建我的INSERT语句,并在其前面加上'cdc_',因为所有表都遵循相同的命名约定.然后我可以让每个表调用的每个触发器只有一个函数.
在我阅读的几乎所有书籍和我经历的例子中,我看到指针以这种方式初始化.假设我有一个我想初始化的类变量NSString*myString.我几乎总会看到这样做:
-(id)init {
if (self = [super init]) {
NSString *tempString = [[NSString alloc] init];
self.myString = tempString;
[tempString release];
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
为什么我不能做以下事情呢?
-(id)init {
if (self = [super init]) {
self.myString = [[NSString alloc] init];
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么一开始就需要额外的tempString,但我可能会在这里遗漏内存管理.我想要做的事情是可接受的还是会引起某种泄漏?我已经阅读了developer.apple.com上的内存管理指南,除非我只是遗漏了一些内容,否则我看不出有什么区别.
我的项目编译并运行正常,除非我尝试编译我的单元测试包,它在下面用" 在'CGPoint'之前的预期说明符 - 限定符列表' "第5行的错误进行轰炸:
#import <Foundation/Foundation.h>
#import "Force.h"
@interface WorldObject : NSObject {
CGPoint coordinates;
float altitude;
NSMutableDictionary *forces;
}
@property (nonatomic) CGPoint coordinates;
@property (nonatomic) float altitude;
@property (nonatomic,retain) NSMutableDictionary *forces;
- (void)setObject:(id)anObject inForcesForKey:(id)aKey;
- (void)removeObjectFromForcesForKey:(id)aKey;
- (id)objectFromForcesForKey:(id)aKey;
- (void)applyForces;
@end
Run Code Online (Sandbox Code Playgroud)
我确保我的单元测试包是我的WorldObject.m的目标,它的标题是在我的测试标题中导入的:
#define USE_APPLICATION_UNIT_TEST 1
#import <SenTestingKit/SenTestingKit.h>
#import <UIKit/UIKit.h>
#import "Force.h"
#import "WorldObject.h"
@interface LogicTests : SenTestCase {
Force *myForce;
WorldObject *myWorldObject;
}
@end
Run Code Online (Sandbox Code Playgroud) 如果我有一个名为Tires的自定义类:
#import <Foundation/Foundation.h>
@interface Tires : NSObject {
@private
NSString *brand;
int size;
}
@property (nonatomic,copy) NSString *brand;
@property int size;
- (id)init;
- (void)dealloc;
@end
=============================================
#import "Tires.h"
@implementation Tires
@synthesize brand, size;
- (id)init {
if (self = [super init]) {
[self setBrand:[[NSString alloc] initWithString:@""]];
[self setSize:0];
}
return self;
}
- (void)dealloc {
[super dealloc];
[brand release];
}
@end
Run Code Online (Sandbox Code Playgroud)
我在View Controller中合成了一个setter和getter:
#import <UIKit/UIKit.h>
#import "Tires.h"
@interface testViewController : UIViewController {
Tires *frontLeft, *frontRight, *backleft, *backRight;
}
@property …
Run Code Online (Sandbox Code Playgroud) objective-c ×4
iphone ×2
associations ×1
function ×1
getter ×1
memory-leaks ×1
model ×1
plpgsql ×1
postgresql ×1
setter ×1
sql ×1
triggers ×1
unit-testing ×1