核心数据允许您将多个持久性存储添加到单个NSPersistentStoreCoordinator(每个具有不同的配置)名称,从而将它们组合在一起NSManagedObjectContext.我无法找到的是Core Data如何处理多个商店的保存操作的原子性.
假设我有两家商店:
NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] init];
[coordinator addPersistentStoreWithType:type configuration:@"A" URL:aURL options:nil error:NULL];
[coordinator addPersistentStoreWithType:type configuration:@"B" URL:bURL options:nil error:NULL];
NSManagedObjectContext *context = [[NSManageObjectContext alloc] init];
[context setPersistentStoreCoordinator:coordinator];
Run Code Online (Sandbox Code Playgroud)
然后是时候保存我这样做:
NSError *error = nil;
BOOL result = [context save:&error];
Run Code Online (Sandbox Code Playgroud)
文档说明事件的顺序是:
如果商店A保存正确,但商店B由于某种原因无法保存怎么办?(例如,磁盘上的文件被删除,或者权限被设置为只读,那种事情).我找不到任何详细说明Core Data是否会将更改回滚到商店A的文档.
对我来说似乎很奇怪,对象图将保持不一致状态(即一个商店更新,一个没有更新),但在多个商店中执行完全原子保存有点棘手和资源密集.我真的想在这里做一些澄清,也许来自对系统有更多经验的人!
我对iPhone开发很新,并尝试在我的应用程序中获取"来自服务器的图像".
我正在使用以下方法执行此操作:
- (UIImage *)imageFromURLString:(NSString *)urlString
{
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
[request setHTTPMethod:@"GET"];
NSURLResponse *response = nil;
NSError *error = nil;
NSData *result = [NSURLConnection sendSynchronousRequest:request
returningResponse:&response error:&error];
[request release];
[self handleError:error];
UIImage *resultImage = [UIImage imageWithData:(NSData *)result];
NSLog(@"urlString: %@",urlString);
return resultImage;
}
Run Code Online (Sandbox Code Playgroud)
虽然我可以在调试器中看到Image对象的NSData有一些值(以字节为单位),但此函数不会返回预期的图像
虽然,从服务器获取文本的功能非常类似,但我获得了预期的值.
- (NSString *)jsonFromURLString:(NSString *)urlString
{
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
[request setHTTPMethod:@"GET"];
NSURLResponse *response = nil;
NSError *error = nil;
NSData *result …Run Code Online (Sandbox Code Playgroud) 我如何在以下方法中获取URL?
- (void)connectionDidFinishLoading:(NSURLConnection*)theConnection
Run Code Online (Sandbox Code Playgroud) 我正在写一个从网上下载东西的iPhone客户端.由于蜂窝网络不是那么快,文件可能很大,我想通过进度条改进活动微调器.
到目前为止一切顺利,我正在使用NSURLConnection并检查Content-Length标头以查看我将下载多少字节.然后,在-connection:didReceiveData:回调中,我将接收到的数据附加到我的NSMutableData对象,在那里我可以跟踪到目前为止下载内容的大小与预期的字节数.
这一切都有效,直到你有一个支持gzip压缩的服务器.使用gzip压缩的服务器将x字节作为内容的大小.但是,由于NSURLConnection在后台进行解压缩,因此传递给didReceiveData回调的数据已经扩展.因此,预期下载的字节小于实际接收的字节,以文件的压缩比例的比例.
这意味着进度条溢出,因为预期的字节数比预期的要早得多.我控制服务器时可以做的就是为gzip内容发送特殊标头,以避免NSURLConnection进行解压缩,但我无法控制网络上的所有服务器.
NSURLConnection是否有任何隐藏方法来报告传输的字节而不是扩展的字节?我是否必须编写自己的NSURLConnection来跟踪传输的字节并自行解压缩gzip数据以获得准确的进度条指示器?也许有另一种较低级别的Core Foundation API?
正如标题所说,我实际上想要从NSBrowser控件中删除边框.父母是NSView和NSControl.NSBrowser本身没有可用的方法,父控件也没有.这个似乎完全没有记录.
至于删除边框的原因,因为它以编程方式停靠在另一个视图中,因此视图层次结构意味着已经存在边框.
有任何想法吗?
我正在尝试将iOS应用程序移植到OSX,有一件事我没有得到.iOS应用程序使用UIWebView,更精确的是实现UIWebViewDelegate的UIView:
@interface Dialog : UIView <UIWebViewDelegate> {
Run Code Online (Sandbox Code Playgroud)
并实现这三个委托方法:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request
navigationType:(UIWebViewNavigationType)navigationType {
- (void)webViewDidFinishLoad:(UIWebView *)webView {
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
Run Code Online (Sandbox Code Playgroud)
有人可以给我一个暗示我如何将其移植到正常的OSX框架?我知道有WebView,但它有4个代表,据我所知,并且这些代理都没有委托方法听起来像那些3.
谢谢
我偶尔会看到像这样的堆栈跟踪崩溃:
0 libobjc.A.dylib 0x97dc0edb objc_msgSend + 27
1 com.apple.CoreData 0x97edcdc2 -[_PFManagedObjectReferenceQueue _queueForDealloc:] + 162
2 com.apple.CoreData 0x97edccbe -[NSManagedObject release] + 94
3 com.apple.CoreFoundation 0x9318ef38 CFRelease + 152
4 com.apple.CoreFoundation 0x931a7460 __CFBasicHashStandardCallback + 384
5 com.apple.CoreFoundation 0x931a706e __CFBasicHashDrain + 478
6 com.apple.CoreFoundation 0x9318f101 _CFRelease + 353
7 com.apple.CoreFoundation 0x931bbc6d _CFAutoreleasePoolPop + 253
8 com.apple.Foundation 0x973270aa NSPopAutoreleasePool + 76
9 com.apple.Foundation 0x97326fd2 -[NSAutoreleasePool drain] + 130
10 com.apple.AppKit 0x95087185 -[NSApplication run] + 627
11 com.apple.AppKit 0x9507f2d9 NSApplicationMain + 574
12 com.karelia.Sandvox 0x70001ef6 …Run Code Online (Sandbox Code Playgroud) 国家文件NSDataReadingOptions:
NSDataReadingUncached
指示文件的提示不应存储在文件系统缓存中.对于一次读取和丢弃的数据,此选项可以提高性能.
这一切都有道理.我很好奇是否有办法知道文件是否已经存在于file-sysem缓存中.
例如,如果我需要执行大量文件读取,则优先读取已驻留在缓存中的文件可能是有意义的.
我正在通过网络接收编码音频流,但是混合了大量数据,因此我需要接收数据包,删除音频然后播放音频.
AVAudioPlayer,可能是也可能不是最好的工具,但它是我正在追逐的路径,需要来自NSData或NSURL的数据.NSData不起作用,因为它是一个数据流,我希望它一到达就开始继续播放.我的想法是:
NSPipe *pipe = [[NSPipe alloc] init];
NSFileHandle *writeHandle = [pipe fileHandleForWriting];
NSFileHandle *readHandle = [pipe fileHandleForReading];
// in network reception thread...
NSData *audioData = [packet getAudioData];
[writeHandle writeData:audioData];
// in audio thread...
NSURL *url = [[NSURL alloc] init];
[url setResourceValue:NSURLFileResourceTypeNamedPipe
forKey:NSURLFileResourceTypeKey
error:&error];
// Connect the readHandle
AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc]
initWithContentsOfURL:url
error:&error];
Run Code Online (Sandbox Code Playgroud)
但是,我不知道如何将`readHandle`传递给URL.如何从现有的NSFileHandle创建NSURL?完全有一些更好的方法吗?有没有办法将数据写入可以成为NSURL的东西?
唯一真正的要求是我可以尽可能近乎实时地播放音频.我不希望在播放之前将数据排队甚至十分之一秒.
我试图通过在我的应用程序中使用twitter阅读来获取用户的联系方式.我在github上发现这个项目看起来真的很棒.我只遇到一个问题.如果我使用来自Twitter的新应用消费者密钥和消费者密钥代码运行它会给我一个错误:
Error Domain=NSURLErrorDomain Code=-1012 "The operation couldn’t be completed. (NSURLErrorDomain error -1012.)" UserInfo=0x6898e80 {NSErrorFailingURLKey=https://api.twitter.com/oauth/request_token, NSErrorFailingURLStringKey=https://api.twitter.com/oauth/request_token, NSUnderlyingError=0x68980e0 "The operation couldn’t be completed. (kCFErrorDomainCFNetwork error -1012.)"}
Run Code Online (Sandbox Code Playgroud)
控制台中的输出是:
2013-01-16 17:55:24.367 DMTwitterOAuth[3411:c07] current status = Prompt for user data and request token to server
2013-01-16 17:55:24.371 DMTwitterOAuth[3411:c07] current status = Requesting token for current user's auth data...
2013-01-16 17:55:25.433 DMTwitterOAuth[3411:c07] current status = Token received from server
Run Code Online (Sandbox Code Playgroud)
在我得到警报视图后,它立即说它遇到了一个NSURLErrorDomain.
另一方面,如果我使用来自另一个Twitter应用程序的其他代码运行它,它会工作,向我提供有关用户的所有详细信息.我只是无法理解为什么它可以使用某些键,而对于其他键则不然.