如果用户当前在我的编辑视图控制器中,我希望能够在用户关闭我的应用程序时保存更改.为此,我正在观察UIApplicationWillTerminateNotification共享应用程序.在我的app委托中,我使用该applicationWillTerminate:方法关闭并释放所有核心数据上下文.
我发现的问题是在任何观察者对通知作出反应之前applicationWillTerminate:,app委托中的方法被调用.这意味着在我的编辑视图控制器有机会保存任何内容之前,我的核心数据堆栈已经发布并关闭!UIApplicationWillTerminateNotification
这通常是如何克服的,因为我看不到方法!
非常感谢,
迈克尔
我在git下有一个Xcode项目,而且我的"master"分支有一个"实验性"分支.自分支以来,两个分支都有分歧(所以没有快进!),我正在将"实验"合并到我的"主"分支中.
我已经设置了一个.gitattributes文件来将特定的Xcode文件(project.pbxproj)视为二进制文件,因为它应该被视为二进制文件.但是,我不确定如何合并它.我不确定那个特定文件是做什么的,但是如果它处理了哪些文件被添加到项目中,我就无法合并它们,因此我必须手动将某些文件添加回项目(可能不是记得他们所有).其他人如何处理这种情况?
此外,我已经读过你必须手动更新二进制文件(显然)或复制不同的版本.但是,一旦进入合并过程,我工作副本中的文件就是"主"版本.我如何访问"实验"版本?我无法检查它,因为它会破坏合并过程.
谢谢你的时间!
我正在写一个存储过程,我想在出现故障时返回0条记录.我似乎无法弄清楚如何只返回0行?我已经使用SELECT NULL但是这会返回1行,并且NULL在第1行第1行中.我也尝试不在SELECT我的错误代码路径中指定任何语句但是在测试@@ROWCOUNTSP之后的值时,它返回1.我认为这可能是因为@@ROWCOUNT从未SELECT在SP中早先的声明(在EXISTS())中重置.任何意见,将不胜感激.
此外,我已XACT_ABORT设置为ON,但我还使用了一个TRY/CATCH块来确保从存储过程返回正确的错误"返回值".这个可以吗?如果有错误,是否XACT_ABORT覆盖TRY/CATCH或我的错误代码路径是否仍会导致返回正确的返回值?
-- Setup
SET NOCOUNT ON; -- SET NOCOUNT ON added to prevent extra result sets from interfering with SELECT statements.
SET XACT_ABORT ON; -- SET XACT_ABORT ON rollback transactions on errors
DECLARE @return int; SET @return = 1; -- Default to general error
-- Start transaction
BEGIN TRANSACTION
BEGIN TRY
IF NOT EXISTS(SELECT NULL FROM …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的获取请求中使用setPropertiesToFetch来限制从我的商店中检索的数据,但它似乎没有任何效果.当我使用它并显示返回控制台的对象时,我可以看到我的所有属性都存在.无论我是否设置属性,都会显示相同的数据.所有关系都显示为错误,但属性的所有数据都存在.
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Entity" inManagedObjectContext:context];
NSDictionary *entityProperties = [entity propertiesByName];
[fetchRequest setEntity:entity];
[fetchRequest setFetchBatchSize:20];
[fetchRequest setIncludesPendingChanges:NO];
[fetchRequest setReturnsObjectsAsFaults:NO];
[fetchRequest setPropertiesToFetch:[NSArray arrayWithObjects:[entityProperties objectForKey:@"myAttrib"], nil]];
Run Code Online (Sandbox Code Playgroud)
fetch似乎返回每个对象的相同数据,有或没有最后一行.有任何想法吗?
在渲染网页和应用样式时,浏览器会对ID和类名进行索引以进行有效搜索,或者每次指定ID或类名以到达正确的元素时,它都会从顶部遍历整个DOM.
我想知道出于优化的原因,以及是否值得将浏览器提示(更长的选择器)提供给某个ID的对象所在的位置.即
#container #one-of-many-container-siblings #my-id
Run Code Online (Sandbox Code Playgroud)
代替:
#my-id
Run Code Online (Sandbox Code Playgroud)
如果DOM非常大,前者会产生更好的性能吗?
我已经使用Core Data设置了iCloud,但似乎从未切换到使用本地存储中无处不在的存储.看看Xcode中的iCloud面板,我可以看到iCloud状态是空闲的,我甚至可以看到在我无处不在的容器(NSPersistentStoreUbiquitousContentNameKey)里面创建了目录,但是图上没有任何活动(上传或下载).
我只在控制台中获得以下内容:
-[PFUbiquitySwitchboardEntryMetadata setUseLocalStorage:](760): CoreData: Ubiquity: me~3C82877D-69EE-5968-A69C-37FD71227462:MyApp
Using local storage: 1
Run Code Online (Sandbox Code Playgroud)
我期待它最终不会使用本地存储,但这种情况从未发生过.
将ubiquity日志级别设置为3,我可以在我的控制台中看到以下日志:
__60-[PFUbiquitySetupAssistant canReadFromUbiquityRootLocation:]_block_invoke(1289): CoreData: Ubiquity: Coordinated read finished for ubiquity root url: file:///Users/me/Library/Mobile%20Documents/VK94X636H2~com~company~MyApp/
-[NSPersistentStoreCoordinator addPersistentStoreWithType:configuration:URL:options:error:](1081): CoreData: Ubiquity: Post store setup succeded. <NSSQLCore: 0x10040bc90> (URL: file:///Users/me/Library/Containers/com.company.MyApp/Data/Library/Application%20Support/CoreDataUbiquitySupport/me~3C82877D-69EE-5968-A69C-37FD71227462/MyApp/33D95E86-2331-4ED6-9ECF-FC88E130A38F/store/MyApp.storedata)
-[PFUbiquitySetupAssistant canReadFromUbiquityRootLocation:](1298): CoreData: Ubiquity: Read finished: 1
-[PFUbiquitySetupAssistant canReadFromUbiquityRootLocation:](1301): CoreData: Ubiquity: Read finished: 1 / 1 / file:///Users/me/Library/Mobile%20Documents/VK94X636H2~com~company~MyApp/CoreData/MyApp/
-[PFUbiquitySetupAssistant canReadFromUbiquityRootLocation:](1305): CoreData: Ubiquity: Blocking for initial sync: <PFUbiquitySetupAssistant: 0x10021edc0>
Run Code Online (Sandbox Code Playgroud)
所以它似乎停留在了Blocking for initial sync,但我不知道为什么.
有谁知道什么可能是错的?
我想要核心数据中字段的最大值,所以我设置了以下请求:
// Create fetch
NSFetchRequest *fetch = [[NSFetchRequest alloc] init];
[fetch setEntity:[NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:context]];
[fetch setResultType:NSDictionaryResultType];
// Expression for Max ID
NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"myNumbericID"];
NSExpression *minExpression = [NSExpression expressionForFunction:@"max:" arguments:[NSArray arrayWithObject:keyPathExpression]];
NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init];
[expressionDescription setName:@"maxID"];
[expressionDescription setExpression:minExpression];
[expressionDescription setExpressionResultType:NSDoubleAttributeType];
[fetch setPropertiesToFetch:[NSArray arrayWithObject:expressionDescription]];
// Execute the fetch.
double theID = 0;
NSError *error;
NSArray *objects = [context executeFetchRequest:fetch error:&error];
if (objects && [objects count] > 0) {
theID = [((NSNumber *)[[objects objectAtIndex:0] valueForKey:@"maxID"]) doubleValue];
} …Run Code Online (Sandbox Code Playgroud) 我有一个NSOperationQueue,它包含2个NSOperations,并设置为通过设置setMaxConcurrentOperationCount为1 来一个接一个地执行它们.
其中一个操作是标准的非并发操作(只是一种main方法),它同步从Web(当然是在单独的操作线程上)检索一些数据.另一个操作是并发操作,因为我需要使用一些必须异步运行的代码.
问题是我发现并发操作只有在首先添加到队列中才有效.如果它出现在任何非并发操作之后,那么奇怪的是该start方法被称为正常,但在该方法结束并且我已经设置我的连接以回调方法之后,它永远不会.之后,队列中不再执行任何操作.就好像它在start方法返回后挂起,并且没有来自任何url连接的回调被调用!
如果我的并发操作首先放入队列中,那么一切正常,异步回调工作,后续操作在完成后执行.我根本不明白!
您可以在下面看到我的并发NSOperation的测试代码,我很确定它是可靠的.
任何帮助将不胜感激!
主线观察:
我刚刚发现,如果并发操作首先在队列中,那么该[start]方法将在主线程上调用.但是,如果它不是队列中的第一个(如果它在并发或非并发之后),[start]则不在主线程上调用该方法.这似乎很重要,因为它符合我的问题模式.这可能是什么原因?
并行的NSOperation代码:
@interface ConcurrentOperation : NSOperation {
BOOL executing;
BOOL finished;
}
- (void)beginOperation;
- (void)completeOperation;
@end
@implementation ConcurrentOperation
- (void)beginOperation {
@try {
// Test async request
NSURLRequest *r = [[NSURLRequest alloc] initWithURL:[NSURL URLWithString:@"http://www.google.com"]];
NSURLConnection *c = [[NSURLConnection alloc] initWithRequest:r delegate:self];
[r release];
} @catch(NSException * e) {
// Do not rethrow exceptions.
}
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
NSLog(@"Finished loading... …Run Code Online (Sandbox Code Playgroud) 在运行一些测试时,我注意到当一个应用程序(没有后台权限,即voip,gps等)进入后台状态时,当时运行的任何后台线程(或并发NSOperations)似乎都被暂停(未终止) ,当应用程序进入前台时它们会继续.
我无法在任何地方看到此线程行为.有谁知道这种行为是否已定义且可以依靠?
如果线程可以在重新打开应用程序时安全地继续,那么不必取消任务或参与任务完成将是有用的.特别适合复杂的操作.
任何信息都会很棒.谢谢!
在Core Data中存储UUID(用于全局多系统对象识别)的最佳方法是什么?考虑存储大小和索引功能.
理想情况下,它将存储为二进制数据(128位),但这样做有什么直接问题吗?以大小方式存储它会更有效,而不是作为NSString,但我只是想检查将其存储为二进制数据没有性能问题.它仍然可以正确索引为二进制数据吗?在可变宽度字段中存储有效的固定宽度二进制数据是否有任何缺点?
我对SQLite及其存储/索引机制并不太熟悉,所以想要寻求一些建议!
core-data ×5
ios ×3
iphone ×3
browser ×1
cocoa-touch ×1
css ×1
git ×1
icloud ×1
macos ×1
multitasking ×1
nsoperation ×1
objective-c ×1
optimization ×1
sql ×1
sql-server ×1
t-sql ×1
uuid ×1
xcode ×1