我正在考虑使用Amazon S3为我的静态站点提供服务.我创建了一个存储桶并上传了我的文件; 在AWS管理控制台的"网站"标签下,我选中了"已启用",并index.html在"索引文档"字段中输入.我有以下存储桶策略:
{
"Version": "2008-10-17",
"Id": "924a2348-de0e-43aa-bb06-83adbcd1db22",
"Statement": [
{
"Sid": "PublicReadForGetBucketObjects",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我有我的桶名而不是my-bucket.在"权限"选项卡下,我还授予"所有人"列表功能.
如果我尝试访问my-bucket.s3.amazonaws.com/index.html我的页面(及其图像,CSS等)按预期显示.但是,只是转到my-bucket.s3.amazonaws.com或my-bucket.s3.amazonaws.com/给出一个目录列表XML文件而不是显示页面.如果我试图去,my-bucket.s3.amazonaws.com/subdirectory我得到一个错误(在XML中)说"指定的密钥不存在."最奇怪的是,如果我尝试去my-bucket.s3.amazonaws.com/subdirectory/(带斜杠),没有页面加载,但我的浏览器下载一个空文件命名download.(再次,my-bucket.s3.amazonaws.com/subdirectory/index.html按预期显示页面.)
我在这里做错了吗?index.html当请求目录名时,如何让S3显示文件?
我想知道iOS支持哪种字体格式.我已经知道iOS支持这种__CODE__格式.你知道它是否支持其他人吗?
谢谢!
例如 - pfm,pmb ???
我有一个地图视图,添加注释或多或少像这样:
- (MKAnnotationView *)mapView:(MKMapView *)mapView
viewForAnnotation:(id <MKAnnotation>) annotation
{
MKAnnotationView *annotationView = [[MKPinAnnotationView alloc] initWithAnnotation:annotation
reuseIdentifier:@"MKPinAnnotationView"];
annotationView.canShowCallout = YES;
UIButton *detailButton = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
[detailButton addTarget:self
action:@selector(handleButtonAction)
forControlEvents:UIControlEventTouchUpInside];
annotationView.rightCalloutAccessoryView = detailButton;
return annotationView;
}
Run Code Online (Sandbox Code Playgroud)
在iOS 7中,这会在标注的右侧放置一个"i"图标.点击图标触发mapView:annotationView:calloutAccessoryControlTapped:(在代理上)和handleButtonAction:(在自己上).不过,我最近意识到你也可以点击标注上的其他任何地方,并触发相同的两种方法.
使用类型的按钮会发生这种情况,UIButtonTypeDetailDisclosure但似乎没有UIButtonTypeCustom按钮发生.当没有附件视图时点击标注时,也不会触发委托方法.(当然,这种行为并不令人惊讶;令人惊讶的是,如果附件视图是详细信息泄露按钮,那么无论您是点击按钮本身还是只是点击标注中的其他位置,这两种方法都会被触发.)
我想摆脱标注中的按钮 - 或者至少用显示我自己的图像而不是股票"i"图标的按钮替换它 - 同时仍允许用户点击标注上的任何地方以触发我的动作.这可能吗?我没有看到MKMapViewDelegate与"callout tapped"对应的方法.
我正在重写Swift中的Objective-C类来感受语言.在Objective-C中,我的课程包括以下方法:
- (id) initWithCoder:(NSCoder *)aDecoder
{
return [self initWithActionName:[aDecoder decodeObjectOfClass:[NSString class] forKey:@"actionName"]
payload:[aDecoder decodeObjectOfClass:[NSDictionary class] forKey:@"payload"]
timestamp:[aDecoder decodeObjectOfClass:[NSDate class] forKey:@"timestamp"]];
}
Run Code Online (Sandbox Code Playgroud)
在使用编译器进行一些试验和错误之后,我设法将其重写为:
convenience init(aDecoder: NSCoder) {
let actionName = aDecoder.decodeObjectOfClass(NSString.self, forKey: "actionName") as NSString
let payload = aDecoder.decodeObjectOfClass(NSDictionary.self, forKey: "payload") as NSDictionary
let timestamp = aDecoder.decodeObjectOfClass(NSDate.self, forKey: "timestamp") as NSDate
self.init(actionName: actionName, payload: payload, timestamp: timestamp)
}
Run Code Online (Sandbox Code Playgroud)
但是,这仍然在最后一行给出了一个错误:"找不到init接受提供的参数的重载."方法签名init是
init(actionName: String, payload: Dictionary<String, NSObject>, timestamp: NSDate)
Run Code Online (Sandbox Code Playgroud)
所以我认为问题是我试图传递NSDictionary而不是Dictionary<String, NSObject>.如何在这两种不完全等效的类型之间进行转换?我是否应该只使用NSDictionary所有必须与其他Objective-C组件交互的代码?
我正在创建一个应用程序,它是一种图库 - 它将不同的媒体内容显示为全屏查看器.分配工具显示使用应用程序时,实时字节参数不会超过40 Mb.与此同时,在我将页面滑动20-30次后,应用程序被100%杀死.我检查了Dirty Memory参数,发现它比Live Bytes大小大10倍.并且大部分脏内存消耗了Image IO:
截图http://i40.tinypic.com/25ge51i.jpg
编辑,另一个截图:
截图http://i40.tinypic.com/9t1mh5.png
上面的分配峰值是切换视频/图像媒体内容.问题是脏内存几乎呈线性增长,我需要以某种方式释放它.
关于应用程序设计.应用程序屏幕有一个水平滚动视图.滚动视图包含包含多个图像的视频或拼贴对象.为了节省内存,一次只创建三个页面 - 当前页面和左/右页面.因此,在滚动滚动视图时,总是会创建和删除页面.
我使用[UIImage imageWithContentOfFile: path]方法加载的所有图像.Collage对象在imagesArray中存储UIImage实例.在dealloc方法中,清除了图像轮廓属性.
所以,问题:
[UIImage imageWithContentOfFile?]我正在使用此Gist中的代码来确定iPhone5,1运行我的应用程序的iOS设备(例如):
- (NSString *)platform
{
size_t size;
sysctlbyname("hw.machine", NULL, &size, NULL, 0);
char *machine = malloc(size);
sysctlbyname("hw.machine", machine, &size, NULL, 0);
NSString *platform = [NSString stringWithUTF8String:machine];
free(machine);
return platform;
}
Run Code Online (Sandbox Code Playgroud)
Swift文档表明C数据类型得到了很好的支持,但它没有提到C函数的任何内容.是否有一种纯粹的Swift方法来检索机器标识符,或者我是否必须桥接到Objective-C?
使用 new ScrolLViewReader,似乎可以以编程方式设置滚动偏移。
但我想知道是否也可以获取当前的滚动位置?
似乎ScrollViewProxy唯一附带的scrollTo方法,允许我们设置偏移量。
谢谢!
我正在更改一个MongoDB集合的模式.(我一直将日期存储为字符串,现在我的应用程序将它们存储为ISODates;我需要返回并更改所有旧记录以使用ISODates.)我想我知道如何使用更新来执行此操作,但是因为这个操作会影响成千上万的记录,所以我不愿意发出一个我不是100%肯定会运作的操作.是否有任何方法可以对更新进行"干运行",以便为少数记录显示原始记录以及如何更改?
编辑:我最终使用为每条记录添加新字段的方法,然后(在验证数据是正确的之后)重命名该字段以匹配原始字段.它看起来像这样:
db.events.find({timestamp: {$type: 2}})
.forEach( function (e) {
e.newTimestamp = new ISODate(e.timestamp);
db.events.save(e);
} )
db.events.update({},
{$rename: {'newTimestamp': 'timestamp'}},
{multi: true})
Run Code Online (Sandbox Code Playgroud)
顺便说一下,将字符串时间转换为ISODates的方法最终起作用了.(我从这个SO答案中得到了这个想法.)
当ree是你的默认vm(在Snow Leopard上)时,你如何在rvm下更新rubygems?我在做:
$ rvm ree gem update --system
Run Code Online (Sandbox Code Playgroud)
这导致看起来一切都很好:
Updating RubyGems
Updating rubygems-update
Successfully installed rubygems-update-1.3.7
Updating RubyGems to 1.3.7
Installing RubyGems 1.3.7
RubyGems 1.3.7 installed
[...]
RubyGems installed the following executables:
/Users/douglassellers/.rvm/rubies/ree-1.8.7-2010.02/bin/gem
Run Code Online (Sandbox Code Playgroud)
但是当我运行gem --version时它仍然说1.3.5.做一个宝石指向ree版本的宝石.
任何人都知道如何使用RVM更新rubygems?
我刚开始使用argparse模块.我编写了以下简化代码片段来演示我遇到的问题.
from argparse import ArgumentParser
if __name__ == '__main__':
parser = ArgumentParser('Test argparse. This string needs to be relatively long to trigger the issue.')
parser.add_argument('-f', '--fin', help='a', required = True)
parser.add_argument('-o', '--out ', help='b', required = True)
parser.add_argument('-t', '--trans', help='c', required = True)
args = parser.parse_args()
print(repr(vars(args)))
Run Code Online (Sandbox Code Playgroud)
AssertionError将使用参数-h运行脚本时生成
Traceback (most recent call last):
File "arg.py", line 10, in <module>
args = parser.parse_args()
File "C:\Users\user\AppData\Local\Continuum\Anaconda\envs\py3k\lib\argparse.py", line 1707, in parse_args
args, argv = self.parse_known_args(args, namespace)
File "C:\Users\user\AppData\Local\Continuum\Anaconda\envs\py3k\lib\argparse.py", line 1739, …Run Code Online (Sandbox Code Playgroud)